2016-04-28 36 views
1

私はQTestで小さなベンチマークを書いていますが、私はQBENCHMARK_ONCEを使っています。ここでQTestは2回のテストケースを実行します

問題を複製するいくつかのサンプルコード:

ヘッダー:

#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ファイル:

********* 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を:

#include "mytest.h" 

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

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

    qDebug() << "test1"; 
} 

QTEST_MAIN(MyTest) 

は "MyTestには、" 私が取得実行それを実行したい一度だけ。いくつかのベンチマークでは、1回の実行で1分かかる。

Linuxでmake 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は本当に重要ではなく、単に計算関数のパラメータであり、内部ループ(反復アルゴリズム)の実行頻度を定義します。それは10,000 btwです。 ;) –

答えて

2

はどうやら、これは順番に意図した動作であります結果に初期化し、キ​​ャッシュの影響を軽減するために:

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

を、私は、彼らはしかしドキュメントにそれを追加すべきだと思います。または、マクロの混乱を避けてください。

関連する問題