您好,我正在尝试使用PostConstruct方法初始化字段,但在测试中,此方法不会填充bidiMap字段。
有没有办法模拟bidiMap
字段,它是DataSource
的字段?
@Component
@Getter
@Setter
@NoArgsConstructor
public class DataSource {
public DualHashBidiMap<String, String> bidiMap = new DualHashBidiMap();
@PostConstruct
public void loadData() throws IOException {
Map<String, String> data = new ObjectMapper().readValue(new File("src/main/resources/static/data.json"), Map.class);
data.entrySet().stream().forEach(item -> this.bidiMap.put(item.getKey(), item.getValue()));
}
}
测试:
@Test
void shouldReturnPrettifiedUrl_WithQueryParams() throws IOException {
// Given
List<String> inputParameters = Arrays.asList("/products?gender=female&tag=123&tag=1234");
HashMap<String, String> expectedResult = PrettyUrlResponseBuilder.PrettyUrlResponseBuilder().createPrettyUrlResponseWithParams();
HashMap<String, String> databaseResponse = DatabaseResponse.DatabaseResponse().createDatabaseResponse();
System.out.println(dataSource);
// When
Map<String, String> actualResult = prettyUrlService.toPretty(inputParameters);
// Then
assertEquals(expectedResult, actualResult);
}
正在测试的类:
@Service
public class PrettyUrlService {
private final DataSource dataSource;
public PrettyUrlService(DataSource dataSource) {
this.dataSource = dataSource;
}
public Map<String, String> toPretty(List<String> urlList) throws IOException {
var data = dataSource.getBidiMap(); // Here, data is null.
// ...
}
}
如果您正在单元测试PrettyUrlService类,那么您不需要在同一测试中也测试底层的数据源类。只需模拟数据源的交互并验证所有预期的交互都在发生就足够了。
例如(假设JUnit 5):
@ExtendWith(MockitoExtension.class)
class PrettyUrlServiceTest {
@Mock
private DataSource dataSource;
private PrettyUrlService prettyUrlService;
@BeforeEach
void setUp() {
prettyUrlService = new PrettyUrlService(dataSource);
}
@Test
void exampleTest() {
DualHashBidiMap<String, String> bidiMap = new DualHashBidiMap();
// add test data to the map
bidiMap.put("testKey", "testValue"); // replace with data you need for test
Mockito.when(dataSource.getBidiMap()).thenReturn(bidiMap);
// insert test logic here (prettyServiceUrl call + assertions)
// ...
// finally, verify that dataSource.getBidiMap() was called exactly once
Mockito.verify(dataSource).getBidiMap();
}
}
起初,我在使用< code>writeAndFlush(...)直到我偶然发现了这个修复。现在,我已经可以使用< code>writeAndFlush(...)每个字符串都带有后缀/r/n。当我尝试发送< code>ByteBuf对象时,问题仍然存在。显然,我不能只在消息末尾添加/r/n。对此有什么解决办法吗? 如果有帮助,我将使用
问题内容: 由于某些原因,当我尝试从BytesIO流制作图像时,它无法识别该图像。这是我的代码: 以及它引发的错误的堆栈跟踪: 我正在使用PIL的Pillow实现。 问题答案: 将BytesIO视为文件对象,在完成图像写入后,文件的光标位于文件的末尾,因此当尝试调用时,它将立即获得EOF。 您需要添加一个经过之前到。
下面是我的自定义注释。 我想用“MyAnnoation”做点什么,所以我声明了和如下方法。 下面的服务被其他类“自动安装”。所以我认为这不是与AOP代理相关的问题。 下面的代码调用上面的服务 如果将注释到一个类,则会调用procedure(),但如果一个方法带有类似于上述代码的注释,则该方法不起作用。我希望它只使用方法。 我想解决什么?
我最近开始缓存一个方法的结果。我使用@Cacheable和@CachePut来实现所需的功能。 但不知何故,save操作并没有更新findAll方法的缓存。以下是相同的代码段: 对于findAll方法的第一个调用,它将结果存储在“persons”缓存中,对于所有后续调用,它将返回相同的结果,即使在两者之间执行了save()操作。 我对缓存很陌生,所以任何关于这方面的建议都会很有帮助。 谢谢
问题内容: 我尝试使用JLabel’s之后尝试在屏幕上绘制图像,现在正在尝试paintComponent方法。我在看不到任何结果并且该方法没有被调用之后尝试插入断点,并且什么也没有出现。我该怎么办?这是我的重要代码- ` 另外,如果有区别,我正在使用JFrame而不是JPanel或组件。 问题答案: 没有方法。您应该避免直接绘制到框架上,而应使用和覆盖其方法 您还应该使用@Override批注,如
我对java“I get this error”不熟悉,找不到适合getText(String)方法JTextComponent的方法。getText(int,int)不适用(实际参数列表和形式参数列表长度不同)方法JTextComponent。getText()不适用 (Alt Enter显示提示)“当我试图运行我的程序时。请帮助。我做错了什么?