[英]How to test void using Unit Test?
我有以下方法,并为此方法用 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));
}
一般的想法是你不想测试特定的代码,但你想测试一些行为。
因此,在您的情况下,您希望验证在传入空List
时不会调用getPriceRequests
和priceService.updateByPriceList
。
具体如何执行取决于您可用的工具。 最简单的方法是,如果您已经模拟priceService
:那么只需指示您的模拟库/框架验证从未调用updateByPriceList
。
在 if 条件中返回的要点是不执行其余代码。 即,如果要执行此// code omitted for brevity
,则该方法将无法满足其目的。 因此,只要确保无论该代码做什么,如果您的列表为空,它就没有完成。
你有3个选择:
查看测试金字塔和 贫血架构如何破坏您的测试以获取更多详细信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.