当前位置: 首页 > 知识库问答 >
问题:

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

柴华灿
2023-03-14

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

我试图更改我的addItem方法以返回布尔类型,而不是什么都不返回。有了它,我就可以编写简单的Assert了。assertTrue(篮子。添加…) 。但我不知道,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个答案

罗渝
2023-03-14

请注意,布尔值在第一个版本中是无效的,因为它总是返回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
}

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

 类似资料:
  • 域单元测试 正如您所看到的,这两个测试都检查用户余额是否为0,这是域责任。因此,问题是:应用层单元测试应该是什么样子的,它应该测试什么?我在某处读到单元测试应该在“流控制的应用服务和业务规则的域模型”中进行测试。谁能再详细说明一下,给出一些例子,应用层单元测试应该测试什么,看起来是什么样子的吗?

  • 问题内容: 我的单例访问器方法通常是: 我可以做些什么来改善这一点? 问题答案: 另一种选择是使用该方法。从文档中: 运行时恰好在该类或从其继承的任何类从程序内部发送其第一条消息之前,一次将其发送到程序中的每个类。(因此,如果不使用该类,则可能永远不会调用该方法。)运行时以线程安全的方式将消息发送给类。超类在其子类之前收到此消息。 因此,您可以执行以下操作:

  • 我正在为我的程序创建一个单元测试。我有一个void方法,它接受五个参数,然后将这些参数转换成一个闭包,并将其传递给另一个服务,然后将其转换成电子邮件并发送。我唯一关心的是这封邮件的正文,它存储在传递给这个函数的一个参数中。有没有可能在不改变我的程序设计的情况下验证这个论点? 编辑:作为对下面答案的回应,我在测试中插入了一个spock样式的模拟,但我认为我的语义不对,因为value存储的是NULL。

  • 问题内容: 第3、16、17、18和19行用*突出显示的含义是什么。有人可以解释他们的工作吗?我是python和编程新手 问题答案: 这段代码中只有三行用*突出显示,但这是它们的意思: 第一行: 这是在声明 后面 的函数( test_Iframe 和 tearDown )的 类* 。在面向对象的编程中,使用一个类来创建“对象” 。可以将 类 视为数据/过程的抽象,而 对象 是类的特定实例。 ***

  • 问题内容: 第3、16、17、18和19行用*突出显示的含义是什么。有人可以解释他们的工作吗?我是python和编程新手 问题答案: 此代码中只有三行用*突出显示,但这是它们的含义: 第一行: 这是在声明 后面 的函数( test_Iframe 和 tearDown )的 类* 。在面向对象的编程中,使用一个类来创建“对象” 。可以将 类 视为数据/过程的抽象,而 对象 是类的特定实例。 ***

  • 我陷入了单元测试场景的一个基本问题,并将感谢帮助。 我有一个类,它调用在DB中将标志设置为true。 我的测试: 我被要求测试并检查是否正在使用相关数据调用。 由于返回类型无效,我如何测试它?