gtest: 运行 TEST_P 里面 2 TEST_Fs
gtest: run TEST_P inside 2 TEST_Fs
我有三个测试:
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
}
问题是当我 运行ning 测试它时 运行s TEST_F
s 在开始然后 运行s TEST_P
,但我需要先 运行 TEST_F
,然后是每个输入的 TEST_P
,最后是最新的 TEST_F
。
注意:在夹具中,我有一个静态成员,它在所有测试用例中使用,但我需要在 运行ning 首先 TEST_F
.
时取消初始化该成员
简答:你不能。而你不应该。
稍微长一点的回答:
让你的测试相互依赖(或它们的执行顺序)是一个 非常糟糕的主意 - 正是出于这个原因 googletest (和 google 测试适配器对于 visual studio) 甚至提供 shuffle 测试用例执行顺序的选项,因此在每个测试中 运行 你都会得到一个新的顺序,只是为了捕获可能会出现的错误以其他方式隐藏,例如
测试用例 #2 涵盖函数 Foo()
,它应该(除其他事项外)将全局标志 Bar
设置为 true
。
您在测试结束时检查 Bar
的状态,即 true
并且测试通过。
测试用例 #5 包含函数 Baz()
,它(除其他事项外)还应将全局标志 Bar
设置为 true
。但是,Baz()
有一个错误, 不会 这样做。
您在测试结束时检查 Bar
的状态...这是 true
因为它已经在测试用例 #2 中设置,并且测试通过 - 你 失败 检测错误。
确保您的每个测试用例可以运行 彼此独立。
我有三个测试:
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
}
问题是当我 运行ning 测试它时 运行s TEST_F
s 在开始然后 运行s TEST_P
,但我需要先 运行 TEST_F
,然后是每个输入的 TEST_P
,最后是最新的 TEST_F
。
注意:在夹具中,我有一个静态成员,它在所有测试用例中使用,但我需要在 运行ning 首先 TEST_F
.
简答:你不能。而你不应该。
稍微长一点的回答:
让你的测试相互依赖(或它们的执行顺序)是一个 非常糟糕的主意 - 正是出于这个原因 googletest (和 google 测试适配器对于 visual studio) 甚至提供 shuffle 测试用例执行顺序的选项,因此在每个测试中 运行 你都会得到一个新的顺序,只是为了捕获可能会出现的错误以其他方式隐藏,例如
测试用例 #2 涵盖函数 Foo()
,它应该(除其他事项外)将全局标志 Bar
设置为 true
。
您在测试结束时检查 Bar
的状态,即 true
并且测试通过。
测试用例 #5 包含函数 Baz()
,它(除其他事项外)还应将全局标志 Bar
设置为 true
。但是,Baz()
有一个错误, 不会 这样做。
您在测试结束时检查 Bar
的状态...这是 true
因为它已经在测试用例 #2 中设置,并且测试通过 - 你 失败 检测错误。
确保您的每个测试用例可以运行 彼此独立。