我有三个测试:
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 时,它TEST_F
在开始时运行s 然后运行TEST_P
,但我需要先运行s TEST_F
,然后TEST_P
是每个输入的 s ,最后是最新的TEST_F
. 注意:在夹具中,我有一个用于所有测试用例的静态成员,但我需要在运行时先取消该成员的初始化TEST_F
。
简短的回答:你不能。你不应该。
稍微长一点的回答:
有你的测试彼此依赖(或者它们的执行顺序)是一个非常糟糕的主意-正是由于这个原因googletest(和Visual Studio中的谷歌测试适配器),甚至提供的选项洗牌测试用例执行顺序,因此在每次测试运行中,您都会获得一个新订单,只是为了捕获否则会隐藏的错误,例如
测试用例 #2 涵盖了Foo()
应该(除其他外)将全局标志设置Bar
为true
.
您检查Bar
测试结束时的状态,即true
测试通过。
测试用例 #5 涵盖了Baz()
应该(除其他外)还将全局标志设置Bar
为true
. 但是,Baz()
有一个错误,并没有这样做。您Bar
在测试结束时检查该状态...这是true
因为它已经在测试用例 #2 中设置,并且测试通过 - 您未能检测到错误。
确保您的每个测试用例都可以彼此独立运行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句