java - 如何为 Overide 方法编写 Junit 测试
问题描述
如何为覆盖方法编写单元测试?代码看起来像这样,但我无法为覆盖方法获得更多代码覆盖。
public MessageHandler handler() {
return new MessageHandler() {
@SneakyThrows
@Override
public void handleMessage(Message<?> message) throws MessagingException {
log.info("Fetching " + message.getPayload());
var file = (File) message.getPayload();
var content = Files.readString(Path.of(file.getPath()));
List<String> fields = Arrays.stream(content.split(";"))
.map(String::trim)
.collect(Collectors.toList());
if(((File) message.getPayload()).getName().startsWith("ACH")) {
log.info("Backup: ", file);
sftpGetAway.sendToSftpUploaded(file);
}else {
log.info("Backup: ", file);
sftpGetAway.sendToSftpNonUploaded(file);
}
processFile(((File) message.getPayload()).getName(), fields);
}
};
}
单元测试代码是这样的。
@Test
public void handler() throws BadRequestException, IOException {
Message<?> message = MessageBuilder.withPayload("@inboundtest.start()")
.setHeader("SOME_HEADER_KEY", "SOME_HEADER_VALUE")
.build();
MessageHandler hand = Mockito.spy(MessageHandler.class);
doNothing().when(hand).handleMessage(any(Message.class));
MessageHandler handler = processAchServiceImp.handler();
hand.handleMessage(message);
Assert.assertNotNull(handler);
}
测试运行良好,但覆盖率无法增加。
解决方案
好像你在嘲笑班级undertest
:
MessageHandler hand = Mockito.spy(MessageHandler.class);
doNothing().when(hand).handleMessage(any(Message.class));
你应该嘲笑你的依赖。此链接应提供有关您的问题的更多解释。
推荐阅读
- python - 使用正则表达式在文本文件中用另一个相同大小的数字替换一个数字
- php - 如何使用 php 在网站上提供来自 mysql 数据库的信息
- mysql - 计算多列中的匹配项
- java - 如何允许 webview 上的多个窗口使 facebook 登录正常工作?
- react-native - 最简单的带有 Hooks 的组件未能通过 Jest 测试并出现错误“不变违规:只能在函数组件的主体内调用 Hooks”。
- python - 是否可以从列表理解中调用函数而无需调用函数的开销?
- android - android是否支持大型数据库表
- java - Java 多态性和重载不同的数据类型
- sql - 长时间运行的查询 - 提高 Redshift 性能的建议
- amazon-elastic-beanstalk - 错误:CommandError - 未安装 SSH。在继续使用 ebcli 之前,您必须安装 SSH