是否可以在单独的进程中运行每个测试用例?

Joh*_*ohn 2 c++ googletest

是否可以在单个进程之外的单独进程中运行每个测试用例?

看来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;
}
Run Code Online (Sandbox Code Playgroud)

Ari*_*Ari 5

您可以使用以下技巧:强制每个测试在最后终止。

假设您想测试一个名为 的函数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

请注意,这确实是一种黑客攻击,远非理想,但它似乎有效。

有关死亡测试的更多信息,请参阅此处。