有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java void方法的单元测试应该是什么样子?

我写了一个程序来模拟商店里的篮子。用户可以从购物篮中添加和删除物品。现在,我想知道我的(void)方法的单元测试应该是什么样子。我正在使用JUnit4

我尝试将addItem方法更改为返回布尔类型,而不是什么也不返回。有了它,我就可以写简单的Assert.assertTrue(basket.add...)。但是我不知道,void方法的单元测试应该如何编写

public boolean addItem(Item item) {
    if (orderedItems.containsKey(item)) {
        Integer currItemCount = orderedItems.get(item);
        orderedItems.replace(item, currItemCount, currItemCount + 1);
        return true;
    } else {
        orderedItems.put(item, 1);
        return true;
    }
}

public void addItem(Item item) {
    if (orderedItems.containsKey(item)) {
        Integer currItemCount = orderedItems.get(item);
        orderedItems.replace(item, currItemCount, currItemCount + 1);
    } else {
        orderedItems.put(item, 1);
    }
}

共 (1) 个答案

  1. # 1 楼答案

    请注意,布尔值在第一个版本中是无效的,因为它总是返回true。此外,添加布尔值实际上不会帮助您对代码进行单元测试,因为这太肤浅了。 所以你应该坚持你原来的想法(没有布尔值)

    关于您的问题:是的addItem()方法不会返回任何内容,但是如果您可以在篮子中添加项目,您很可能也希望阅读它们
    测试add()的最简单方法是依赖get()/find()方法
    反之亦然

    对于篮子中不存在的项目,您可以编写类似的测试:

    @Test
    public void addItem_given_item_not_present_then_getAll_retrieves_it() {
       basket.addItem(new Item("foo"));
       Map<Item, Integer> items = basket.getAll();
       // assert items contains 1 element with 1 occurrence and with the foo name
    }
    

    当然,您应该编写其他测试场景