CppUnit 测试与 Qt 5.9 一起挂起

CppUnit test hangs with Qt 5.9

本文关键字:一起 挂起 Qt 测试 CppUnit      更新时间:2023-10-16

将我们的源代码从Qt 5.6移植到Qt 5.9.1时,使用CppUnit 1.13.2进行测试时出现了一个问题:在完成时成功执行所有单元测试时DllPluginTester.exe挂起。调试到进程中时,堆栈显示

CppUnit::D ynamicLibraryManager::d oReleaseLibrary((

卡住调用::FreeLibrary,再往上看堆栈挂起QThread::wait(),即WaitForSingleObject永远等待。

有没有人知道什么会导致这种行为?

我找到了该问题的原因:c.f. QTBUG-34460。 我不知道为什么在从Qt版本5.6移动到5.9.1之前没有发现该问题,因为该错误已经在5.1.1版本中报告。所以调查花了一些时间。

对于受影响的测试 - 所有这些测试都涉及某种多线程,例如通过在某处调用QtConcurrent::run()- 我在每个受影响的测试的末尾插入了以下行作为我的解决方案:

void UnitTestClass::testWithMultithreadingInside
{
...
constexpr auto MAX_WAIT_MS = 5000;
auto pool = QThreadPool::globalInstance();
if (pool)
{
pool->clear();
pool->waitForDone(MAX_WAIT_MS);
}
}