【问题标题】:QTest execute tests in method instead of mainQTest 在方法而不是 main 中执行测试
【发布时间】:2018-07-16 12:51:28
【问题描述】:

有没有办法在类方法中执行 QTest::qExec() 而不是 main()? 我需要将我的测试项目编译为 dll 而不是独立的 .exe。 该dll被现有的GUI使用,测试应通过按钮执行。

但是,当调用 qexec 时,QTGUI 冻结并且不再响应。 以下是处理 Buttons 请求以执行测试的 qt 插槽的实现,稍后应读取结果并将其显示在一些 QEdit 小部件中(它已经在虚拟结果中工作)。

int GUI_Form::onTestRequested()
{
const char* n_argv[] = { "-o", "dummy.txt"};
QCoreApplication CoreApp(argc, const_cast<char**>(n_argv)); 
QApplication app(argc, const_cast<char**>(n_argv));

return QTest::qExec(&mTestform, argc, const_cast<char**>(n_argv));
}

它编译得很好。不实现 QCoreApplication 和 QApplication 在功能上没有区别,我添加它们是因为它们在通常的 main() 中是必需的。

【问题讨论】:

  • 如果您已经有一个QApplication(您的GUI 应用程序),为什么还需要另一个QApplication?我认为你的测试槽应该这样做:return QTest::qExec(&amp;mTestform, QStringList() &lt;&lt; "-o" &lt;&lt; "dummy.txt");
  • @vahancho 感谢您的评论。这也是我的猜测,但它不起作用。由于 QT 的旧版本,我不能使用漂亮的 QStringList。除此之外,如果没有 QApplication,它也不起作用。您还有其他想法吗?

标签: c++ qt methods qtestlib


【解决方案1】:

您始终可以将调用导出到 QTest::exec 的 dll 函数中进行包装

现在,显然如果从(其他)GUI 应用程序的主线程调用,它将冻结您的 GUI。您可能想从后台线程调用它(如果您的测试和测试下的类当然是线程安全的)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多