是否可以在单独的进程中而不是在单个进程中运行每个测试用例?
似乎gtest
本身并不打算支持此功能。
当我做测试时,我发现所有的测试用例都在同一个线程中运行。下面是所说的代码片段:
TEST(TestSuitNameA, TestCaseName)
{
std::cout << std::this_thread::get_id() << std::endl;
}
TEST(TestSuitNameB, TestCaseName)
{
std::cout << std::this_thread::get_id() << std::endl;
}
这里有一个可以使用的破解方法:强制每个测试在最后结束。
假设您想测试一个名为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), "");
}
此处的示例:https://godbolt.org/z/WrWz67jhG
请注意,这确实是一个黑客攻击,远非理想,但它似乎有效。
有关死亡测试的更多信息,请参阅此处。