2016-04-28 2 views
1

Я написал небольшой тест в QTest, и хотя я использовал QBENCHMARK_ONCE.QTest выполняет тестовый пример дважды

Вот несколько примеров кода тиражирование вопрос:

Заголовок:

#ifndef MY_TEST_H 
#define MY_TEST_H 

#include <QtTest> 

class MyTest : public QObject 
{ 
    Q_OBJECT 

private slots: 
    void initTestCase(); 
    void test1(); 
}; 

#endif // MY_TEST_H 

CPP файл:

#include "mytest.h" 

void MyTest::initTestCase() { 
    qDebug() << "init"; 
} 

void MyTest::test1() { 
    QBENCHMARK_ONCE { 
     qDebug() << "bench"; 
    } 

    qDebug() << "test1"; 
} 

QTEST_MAIN(MyTest) 

Запуск "MyTest" я получаю:

********* Start testing of MyTest ********* 
Config: Using QtTest library 5.5.1, Qt 5.5.1 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 5.3.1 20160407) 
QDEBUG : MyTest::initTestCase() init 
PASS : MyTest::initTestCase() 
QDEBUG : MyTest::test1() bench 
QDEBUG : MyTest::test1() test1 
QDEBUG : MyTest::test1() bench 
QDEBUG : MyTest::test1() test1 
PASS : MyTest::test1() 
RESULT : MyTest::test1(): 
    0 msecs per iteration (total: 0, iterations: 1) 
PASS : MyTest::cleanupTestCase() 
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted 
********* Finished testing of MyTest ********* 

I хотел бы, чтобы он работал ce и только один раз. Некоторые из тестов занимают одну минуту на итерацию ...

Я использую CMake с make back-end на Linux. Они тестируют классы, скомпилированные в отдельные исполняемые файлы. Поскольку CTest не дает мне полезный выход, я запускать их непосредственно, то есть, "# ./mytest"

// Дополнение: CMakeLists.txt

include(CTest) 
enable_testing() 
set(CMAKE_AUTOMOC ON) 
find_package(Qt5Test REQUIRED) 

add_executable(mytest "test/mytest.cpp") 
add_test(mytest mytest) 
target_link_libraries(mytest Qt5::Test) 
+0

Не могли бы вы попытаться создать небольшой воспроизводимый пример, пожалуйста? Например, какое значение присвоено NUMBER_ITERATIONS, в вашем примере не отображается. – KimKulling

+0

Я попытаюсь создать его. NUMBER_ITERATIONS действительно не имеет значения, это всего лишь параметр для функции вычисления и определяет, как часто запускается внутренний цикл (итеративный алгоритм). Это 10 000 битв. ;) –

ответ

2

По-видимому, это предназначено поведение для того, чтобы смягчить влияние инициализации и кэшей на результат:

https://bugreports.qt.io/browse/QTBUG-12689

Я думаю, что они должны добавить, что в документации, хотя. Или назвать макрос менее запутанным.