CppUnit测试与Qt 5.9挂起

时间:2017-07-18 15:43:18

标签: c++ qt5 cppunit

在将源代码从Qt 5.6移植到Qt 5.9.1时,在使用CppUnit 1.13.2进行测试时出现了问题:::FreeLibrary在完成所有单元测试后成功挂起。调试进程时,堆栈显示

  

的CppUnit :: DynamicLibraryManager :: doReleaseLibrary()

在调用QThread::wait()时遇到问题,并且堆栈的进一步挂起WaitForSingleObject,即request.environ('werkzeug.server.shutdown')永远等待。

有人知道会导致这种行为的原因吗?

1 个答案:

答案 0 :(得分:0)

我找到了这个问题的原因: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);
  }
}
相关问题