我有下面的方法,我用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
块或者我应该在当前测试方法中添加相关的Assert行吗?
更新:以下是我的测试方法:
@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));
}
3条答案
按热度按时间zd287kbt1#
一般的想法是,您不想测试特定的代码,但希望测试某些行为。
所以在你的情况下,你想验证一下
getPriceRequests
及priceService.updateByPriceList
在传入空List
.具体如何做到这一点取决于您有哪些可用的工具。最简单的方法是如果你已经嘲笑了
priceService
:然后只需指示模拟库/框架验证updateByPriceList
从来没有人打过电话。h7wcgrx32#
在if条件中执行返回的目的是不执行代码的其余部分。i、 例如,如果
// code omitted for brevity
如果要执行,该方法将无法满足其目的。因此,只要确保无论代码做什么,如果列表为空,它都不会完成。ohfgkhjo3#
您有3种选择:
用mock编写一个单元测试。mockito允许您验证()是否调用了某个方法。
使用数据库编写更高级的测试。在测试服务外观层时,这通常是一个更明智的选择。在这种情况下,您可以在测试中获得db的结果状态,以检查它是否做了它必须做的事情。
重构您的代码,使其以不同的方式工作
查看测试金字塔和贫血架构如何破坏您的测试,了解更多详细信息。