在单线程中强制 googletest 运行 的命令行选项

Command-line options to force googletest to run in single thread

我有一套由 googletest 管理的单元测试。默认情况下,这些测试在多个线程中 运行,即使我使用 --gtest_filter=foo.test 时也是如此,因此它只有 运行 一个测试。这导致我试图解决一个错误的原因含糊不清。

如何在 googletest 中关闭多线程测试?

single/multi-threading 没有命令行开关。 libgtest 要么构建 单线程或多线程。

要使其成为单线程,请使用 ./configure --with-pthreads=no 构建 gtest,然后 link 没有 -pthread

的单元测试应用程序

如果您有时只需要单线程,那么制作一个 libgtest 的无线程构建, 称它为其他名称,并在需要时 link。

如果您使用 cmake 构建 googletest,则可以使用 cmake 选项 gtest_disable_pthreads 来控制对线程的支持。例如:

$ mkdir build && cd build
$ cmake .. -Dgtest_disable_pthreads=ON

结果输出应该显示:

-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - found
-- Found Threads: TRUE  

那你就可以运行make照常了。

在禁用多线程的情况下重建的另一个选项是简单地为不能运行并发的测试创建一个测试夹具。然后在 SetUp() 和 TearDown() 方法中,分别锁定和解锁互斥量。

确保使用存在于测试装置之外的互斥体,因为每次测试都会创建和拆除装置。

std::mutex g_singleThread;

class SingleThreadedTests
{
protected:
   virtual void SetUp() override
   {
      g_singleThread.lock();
   }

   virtual void TearDown() override
   {
      g_singleThread.unlock();
   }
};

TEST_F(SingleThreadedTests, MyTest)
{
   // ...
}