QTEST_MAIN 不使用提供的 Testclass

Posted

技术标签:

【中文标题】QTEST_MAIN 不使用提供的 Testclass【英文标题】:QTEST_MAIN doesn't use provided Testclass 【发布时间】:2016-04-08 11:33:53 【问题描述】:

我想对线程及其交互(例如共享数据)进行性能测试。为了实现这一点,我尝试了 Qt 提供的 Tutorial for Benchmarks,这导致我编写了以下代码。

基准级:

class Bm : public QObject

     Q_OBJECT
private slots:
    void Benchmark_1()
    
        bm_1 bm;
        QBENCHMARK
        
            pool.start(&bm);         //pool is a QThreadpool
            pool.start(&bm);
            pool.waitForDone();
        

    
    void Benchmark_2()
    
        bm_1 b_1; bm_2 b_2;
        QBENCHMARK
        
            pool.start(&b_1);
            pool.start(&b_2);
            pool.waitForDone();
        
    
;

包含线程任务的类:

class bm_1 : public QRunnable         //bm_2 looks just like bm_1

public:
    void test_1();
    void run()
    
        test_1();
    
;

主函数被 QTest 宏替换:

QTEST_MAIN(Bm)

QTEST_MAIN 返回 0,这意味着,根据 Qt 文档,没有要测试的内容。如果我现在尝试使用调试器来了解可能出现的问题,我会收到两个启动错误:

Gdb 进程已终止(0)

在启动过程中程序退出,代码为 0xc0000138

我做错了什么?

我需要 QTest(而不是例如 ellapsedTimer)来衡量没有操作系统和 adobe 更新程序污染的性能。这是一台公司拥有的笔记本电脑。我检查了我的包含,甚至重新安装了 Qt。

【问题讨论】:

【参考方案1】:

我发现我做错了。 包含我的基准测试的类称为Bm,实现它的文件称为benchmar.cppbenchmark.h。将类名更改为benchmark 解决了这个问题。

为什么我不知道,我阅读 QObject 4.8 文档并没有让我更进一步。 Soo... 还有一个怪癖。

嘿嘿!

【讨论】:

以上是关于QTEST_MAIN 不使用提供的 Testclass的主要内容,如果未能解决你的问题,请参考以下文章

QtTest:不会生成moc文件

如果我们不提供广告,我们可以使用 IDFA

sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用 1,提供了 74 个

sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用 1,提供了 4 个

PowerShell BizTalk 脚本不使用 PowerShell 的 BizTalk 提供程序

登录表单不提供 Chrome 上的密码保存功能