gtest:在2个TEST_F中运行TEST_P

时间:2018-08-10 14:16:08

标签: 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,然后运行{{1} },然后是最新的TEST_P。 注意:在灯具中,我有一个静态成员,该成员在所有测试用例中都使用,但是在第一次运行TEST_F时,我需要使该成员未初始化。

1 个答案:

答案 0 :(得分:2)

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

答案略长:
让您的测试相互依赖(或执行顺序)是一个非常不好的主意-出于这个原因,googletest(以及适用于Visual Studio的Google测试适配器)甚至提供了选项改组您的测试用例执行顺序,因此,在每次测试运行中,您都会获得一个新的顺序,只是为了捕获否则会隐藏的错误,例如

第2个测试用例介绍了功能Foo(),该功能应(除其他事项外)将全局标志Bar设置为true
在测试结束时检查Bar的状态,即true,测试通过。

第5个测试用例涵盖了功能Baz(),该功能应(除其他事项外)还将全局标志Bar设置为true。但是,Baz()有一个错误,并且没有这样做。 您在测试结束时检查Bar的状态... true,因为状态已经在测试用例#2中设置,并且测试通过-您失败检测该错误。

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