QTEST_MAIN не использует предоставленный Testclass

Я хочу сделать тест производительности потоков и их взаимодействия (например, общие данные). Чтобы достичь этого, я попробовал предоставить Учебное пособие по тестам Qt, которое побудило меня написать следующий код.

Эталонный класс:

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 Updater. Это принадлежащий компании ноутбук. Я проверил свои включения и даже переустановил Qt.

1 ответ

Решение

Я обнаружил, что неправильно поступил. Класс, который содержал мой тест, назывался Bm, файлы, в которых он был реализован, назывались benchmar.cppа также benchmark.h, Изменение названия класса на benchmark решил проблему.

Почему я понятия не имею, и чтение документации QObject 4.8 не дало мне дальнейшего развития. Су... еще одна причуда для жизни.

Whoohey!

Другие вопросы по тегам