如何将Google Test测试用例标记为“预计会失败”?

时间:2013-12-26 13:45:47

标签: c++ unit-testing googletest

我想为尚未实现的功能添加一个测试用例,并将此测试用例标记为“我可以失败”。

有办法做到这一点吗?

编辑: 我希望执行测试,只要测试用例处于“预期的失败”状态,框架就应该验证它是否失败。

EDIT2: 似乎我感兴趣的功能在google-test中不存在,但它确实存在于the Boost Unit Test FrameworkLIT中。

4 个答案:

答案 0 :(得分:3)

答案 1 :(得分:0)

我不知道直接这样做的方法,但你可以用这样的东西来伪造它:

try {
  // do something that should fail
  EXPECT_TRUE(false);
} catch (...) {
  // return or print a message, etc.
}

基本上,如果达到矛盾的预期,测试将会失败。

答案 2 :(得分:0)

EXPECT_NONFATAL_FAILURE是要包装在预期会失败的代码周围的内容。请注意,您将包含gtest-spi.h头文件:

#include "gtest-spi.h"

 // ...

TEST_F( testclass, testname )
{
EXPECT_NONFATAL_FAILURE(
      // your code here, or just call:
      FAIL()
      ,"Some optional text that would be associated with"
      " the particular failure you were expecting, if you"
      " wanted to be sure to catch the correct failure mode" );
}

答案 3 :(得分:-2)

在预期到失败的状态下进行单元测试是不常见的。单元测试可以测试正面条件(“期望x等于2”)或负面条件(如果savename,则“期望null抛出异常}“),并且可以标记为根本不运行(如果该功能处于待处理状态,并且您不希望测试输出中出现噪声)。但是你似乎要求的是一种在你正在努力的时候否定一个功能测试的方法。这是针对测试驱动开发的租户。

在TDD中,您应该做的是编写测试,准确描述应该做什么。如果尚未编写该功能,那么根据定义,这些测试将会 失败。然后你实现该功能,直到所有这些测试通过为止。您希望所有测试都以失败开始,然后转移到传递。这就是您知道功能何时完成的方式。

如果您能够将失败的测试标记为按照您的建议进行传递,请考虑它的外观:所有测试都会通过,并且当该功能不起作用时,一切都会看起来完整。然后,一旦完成并且功能按预期工作,突然您的测试将开始失败,直到您进入并取消标记它们。除了一种奇怪的工作方式之外,这个工作流程非常容易出错和误报。