是否可以在单个进程之外的单独进程中运行每个测试用例?
当我进行测试时,我发现所有测试用例都在同一个线程中运行。这是上述代码片段:
TEST(TestSuitNameA, TestCaseName)
{
std::cout << std::this_thread::get_id() << std::endl;
}
TEST(TestSuitNameB, TestCaseName)
{
std::cout << std::this_thread::get_id() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
您可以使用以下技巧:强制每个测试在最后终止。
假设您想测试一个名为 的函数MyFunction,然后可以将其包装在另一个名为 的函数中,如果MyFunctionTester测试通过,则该函数以代码 0 退出,否则以代码 1 退出。然后在您的测试中使用EXPECT_EXIT.
这是一个简单的例子:
int MyFunction(int a){
return a+1;
}
void MyFunctionTester(int a){
auto actual = MyFunction(a);
std::cout << "actual: " << actual << std::endl;
_exit(actual);
}
TEST(TestSuitNameA, TestCaseName)
{
GTEST_FLAG_SET(death_test_style, "threadsafe");
std::cout << " thread id: " << std::this_thread::get_id() << std::endl;
EXPECT_EXIT(MyFunctionTester(1), testing::ExitedWithCode(2), "");
}
TEST(TestSuitNameB, TestCaseName)
{
GTEST_FLAG_SET(death_test_style, "threadsafe");
std::cout << " thread id: " << std::this_thread::get_id() << std::endl;
EXPECT_EXIT(MyFunctionTester(2), testing::ExitedWithCode(3), "");
}
Run Code Online (Sandbox Code Playgroud)
现场示例: https: //godbolt.org/z/WrWz67jhG
请注意,这确实是一种黑客攻击,远非理想,但它似乎有效。
有关死亡测试的更多信息,请参阅此处。