2016-04-28 71 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 ********* 

我希望它能繼續運行只有一次。一些基準每次迭代需要一分鐘...

我在Linux上使用CMake進行後端處理。他們測試的類被編譯成單獨的可執行文件。由於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並不重要,它只是compute函數的一個參數,它定義了內部循環(迭代算法)運行的頻率。它是10000 btw。 ;) –

回答