java - 如何使用单元测试测试 void?
问题描述
我有以下方法,并为此方法用 Java 编写了一个单元测试。除了if
语句之外,它已被覆盖,我还需要测试这部分。
@InjectMocks
private ProductServiceImpl productService;
public void demoMethod(final List<UUID> productUuidList) {
if (productUuidList.isEmpty()) {
return;
}
final Map<ProductRequest, PriceOverride> requestMap = getPriceRequests(uuidList);
productService.updateByPriceList(priceRequestMap, companyUuid);
}
但是,由于方法执行已完成并且为空时不返回任何内容uuidList
,因此我无法测试此if
块。
所以:
我怎样才能测试这个
if
块?我应该创建一个新的单元测试方法来测试这个
if
块吗?或者我应该在当前的测试方法中添加相关的断言行吗?
更新:这是我的测试方法:
@Test
public void testDemoMethod() {
final UUID uuid = UUID.randomUUID();
final List<Price> priceList = new ArrayList<>();
final Price price = new Price();
price.setUuid(uuid);
priceList.add(price);
productService.demoMethod(Collections.singletonList(uuid));
}
解决方案
一般的想法是你不想测试特定的代码,但你想测试一些行为。
因此,在您的情况下,您要验证这一点,getPriceRequests
并且priceService.updateByPriceList
在传入 empty 时不会被调用List
。
你如何做到这一点取决于你有什么可用的工具。最简单的方法是如果你已经模拟了priceService
:那么只需指示你的模拟库/框架来验证它updateByPriceList
从未被调用过。
推荐阅读
- runtime - CardView 样式未显示在设备上
- r - R - ggplot2 - ggplot(data, aes(x=variable...)) 和 ggplot(data, aes(x=data$variable...)) 之间的区别
- python - 具有相互依赖值的矩阵中的矢量化计算
- ios - 故事板中的自定义 alertViewController
- c# - Codesmith:* 中的错误。例如:System.InvalidOpException:ExecuteReader 需要一个开放且可用的 Con。con 的当前状态是关闭(C#,SQL)
- java - 在 RestAssured (Java) 中将 JSON 文件转换为字符串
- php - 用于测试页面上所有链接的递归函数
- android - 在 ExoPlayer 中,究竟如何使用 SimpleExoPlayer.setVideoScalingMode 就像在 ImageView center-crop 中一样?
- python - 创建一个临时的 keras 会话?
- java - 将类路径添加到 Eclipse 运行配置