c++ - gtest : run TEST_P inside 2 TEST_Fs

标签 c++ c++11 c++14 c++17 googletest

我有三个测试:

TEST_F(lexer, no_data)
{
    // some initial test
}

INSTANTIATE_TEST_CASE_P(parser, lexer, ::testing::Values(/*some list of values*/));
TEST_P(lexer, with_data)
{
    // fixture's static member initialization.
    // tests for each input value
}

TEST_F(lexer, no_more_data)
{
    // final test
}

问题是,当我运行测试时,它首先运行 TEST_F,然后运行 ​​TEST_P,但我需要先运行 TEST_F,然后是每个输入的 TEST_P,最后是最新的 TEST_F。 注意:在夹具中,我有一个静态成员,用于所有测试用例,但我需要在第一次运行 TEST_F 时取消初始化该成员。

最佳答案

简短的回答:你不能。而你不应该。

稍微长一点的回答:
让您的测试相互依赖(或它们的执行顺序)是一个非常糟糕的主意 - 出于这个原因,googletest(以及 visual studio 的 google 测试适配器)甚至提供了 的选项打乱你的测试用例执行顺序,所以在每次测试运行中你都会得到一个新的顺序,只是为了捕捉否则会被隐藏的错误,例如

测试用例 #2 包含函数 Foo(),它应该(除其他事项外)将全局标志 Bar 设置为 true
您在测试结束时检查 Bar 的状态,该状态为 true 并且测试通过。

测试用例 #5 包含函数 Baz(),它(除其他事项外)还应将全局标志 Bar 设置为 true。但是,Baz() 有一个错误,不会这样做。 您在测试结束时检查 Bar 的状态...这是 true 因为它已经在测试用例 #2 中设置,并且测试通过了 - 您 < strong>未能检测到错误。

确保您的每个测试用例都可以彼此独立运行。

关于c++ - gtest : run TEST_P inside 2 TEST_Fs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51788471/

相关文章:

C++ 可变类型量词在变量定义中的位置

c++ - 更新/初始化函数或构造函数(构造时数据不可用)

c++ - Visual C++ 错误 C2143 : syntax error: missing ')' before 'constant'

return 语句中的 C++11 显式转换运算符/构造函数

c++ - 模板参数提取和修改

c++ - 为什么 `std::async` 无法选择正确的重载?

c++ - 识别ffmpeg的rtsp断开连接

c++ - 使用 Android Studio 构建共享 *.so 库的发布版本

c++ - 使用 C++11 将可变函数参数转发给可变函数

c++ - 检测任意成员的存在