如何使用单元测试测试void?

yks3o0rb  于 2021-09-13  发布在  Java
关注(0)|答案(3)|浏览(515)

我有下面的方法,我用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));
}
b1zrtrql

b1zrtrql1#

一般的想法是,您不想测试特定的代码,但希望测试某些行为。
所以在你的情况下,你想验证一下 getPriceRequestspriceService.updateByPriceList 在传入空 List .
具体如何做到这一点取决于您有哪些可用的工具。最简单的方法是如果你已经嘲笑了 priceService :然后只需指示模拟库/框架验证 updateByPriceList 从来没有人打过电话。

ej83mcc0

ej83mcc02#

在if条件中执行返回的目的是不执行代码的其余部分。i、 例如,如果 // code omitted for brevity 如果要执行,该方法将无法满足其目的。因此,只要确保无论代码做什么,如果列表为空,它都不会完成。

6yoyoihd

6yoyoihd3#

您有3种选择:
用mock编写一个单元测试。mockito允许您验证()是否调用了某个方法。
使用数据库编写更高级的测试。在测试服务外观层时,这通常是一个更明智的选择。在这种情况下,您可以在测试中获得db的结果状态,以检查它是否做了它必须做的事情。
重构您的代码,使其以不同的方式工作
查看测试金字塔和贫血架构如何破坏您的测试,了解更多详细信息。

相关问题