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!