gtest:在 2 TEST_Fs内运行TEST_P

gtest: run TEST_P inside 2 TEST_Fs

本文关键字:TEST 运行 Fs gtest      更新时间:2023-10-16

我有三个测试:

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_Fs,然后运行TEST_P,但我需要先运行TEST_F,然后为每个输入运行TEST_Ps,最后运行最新的TEST_F。 注意:在夹具中,我有一个静态成员,它用于所有测试用例,但是我需要在运行第一个TEST_F时取消初始化该成员。

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

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

测试用例 #2 涵盖了函数Foo(),该函数应(除其他外(将全局标志Bar设置为true
在测试结束时检查Bar状态,即true测试通过。

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

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