首页 > 解决方案 > 如何使用单元测试测试 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块。

所以:

  1. 我怎样才能测试这个if块?

  2. 我应该创建一个新的单元测试方法来测试这个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));
}

标签: javaspringunit-testingtesting

解决方案


一般的想法是你不想测试特定的代码,但你想测试一些行为

因此,在您的情况下,您要验证这一点,getPriceRequests并且priceService.updateByPriceList在传入 empty 时不会被调用List

你如何做到这一点取决于你有什么可用的工具。最简单的方法是如果你已经模拟了priceService:那么只需指示你的模拟库/框架来验证它updateByPriceList从未被调用过。


推荐阅读