我有一套由googletest管理的单元测试。默认情况下,这些测试在多个线程中运行,即使我使用--gtest_filter=foo.test
以便它只运行一个测试。这导致了我试图敲诈的错误原因的模糊性。
如何在googletest中关闭多线程测试?
答案 0 :(得分:7)
单线/多线程没有命令行开关。 libgtest
也是建立的
单线程或多线程。
要使其成为单线程,请使用./configure --with-pthreads=no
构建gtest,然后在不使用-pthread
的情况下链接您的单元测试应用
如果您有时只想要单线程,那么建立libgtest
的无线程构建,
称之为别的东西,并在需要时链接它。
答案 1 :(得分:3)
如果您使用cmake构建googletest,则可以使用cmake选项RemoveField
来控制对线程的支持。例如:
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
。
答案 2 :(得分:0)
缺少禁用多线程进行重建的另一种选择是简单地为不能同时运行的测试创建测试夹具。然后在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)
{
// ...
}