在单元测试中是否应该至少有一个断言?如果是这样,为什么?

时间:2018-03-20 12:39:15

标签: unit-testing googletest

如果我们采用例如gtest,我们可以选择使用像ASSERT_NE这样的断言或像EXPECT_NE这样的检查。我的一位同事指出,在我的测试中,我应该至少有一个断言,最好是检查主要目标的条件。 所以,到目前为止,我习惯在测试延续无用的地方使用ASSERT,并且在测试可以继续的地方使用EXPECT。 使用ASSERT和EXPECT的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

EXPECT_*ASSERT_*宏之间的主要区别在于断言如果失败则立即停止测试,而期望允许它继续。

以下是GoogleTest Primer所说的内容:

  

通常EXPECT_*是首选,因为它们允许在测试中报告多个失败。但是,如果在有问题的断言失败时继续有意义,则应使用ASSERT_*

所以,说明一下:

TEST_F(myTest, test1)
{
    uut.doSomething();
    ASSERT_EQ(uut.field1, expectedvalue1);
    ASSERT_EQ(uut.field2, expectedvalue2);
}

如果field1与断言不匹配,则测试失败,您不知道field2是否正确。这使得调试变得更加困难。

这些选项之间的选择主要是团队中协议问题,但我坚持使用EXPECT_*作为所有检查的主干并且{{1}的GTest主张只有当你测试一些关键的东西才能继续,没有这些东西,测试的其他部分没有任何意义(例如,如果你的被测单元没有正确创建)。