3

QTestLib ライブラリと QTest を使用して単体テストを実行しています。私は Windows 7 で作業しており、MVSC 2010 コンパイラで Qt 4.8 を使用しています。次を使用してテストを実行すると:

QTest::qExec(TestDateDD/whateverTestClass);

コンソールに出力が表示されます。

********* Start testing of TestDateDD *********
    Config: Using QTest library 4.8.0, Qt 4.8.0
    PASS   : TestDateDD::initTestCase()
    PASS   : TestDateDD::testValidity()
    FAIL!  : TestDateDD::testMonth(2012/7/10) Compared values are not the same
    Actual (date.longMonthName(date.month())): July
    Expected (monthname): June
    ..\UnitTestingPlugiin\TestDateDD.cpp(38) : failure location
    PASS   : TestDateDD::cleanupTestCase()
    Totals: 3 passed, 1 failed, 0 skipped
    ********* Finished testing of TestDateDD *********

ただし、私の要件は、テスト スロットごとに GUI にこのメッセージを表示することです。いくつかの調査を行ったところ、qtestlog.cppは独自の messageHandler を使用してテスト出力を管理し、結果を PASS または FAIL として失敗メッセージ、行番号などとともに表示することがわかりました。QTest のこの messageHandler を処理する方法はありますか?私のGUIアプリケーション?

4

1 に答える 1

5

ロガーの機能を変更する方法はありません。QAbstractTestLogger は、ファイルまたは stdout に出力するようにハードコードされており、独自の実装を QTestLog に提供することはできません。

stdout をテキストボックスにリダイレクトするか、ファイルを呼び出して書き出す-o filenameときに引数として指定することができます。QTest::qExec

ただし、代わりに、テストを個別の実行可能ファイルにコンパイルし、.xml を使用して実行することをお勧めしますQProcess。継承QIODeviceし、そのデータをウィンドウに送信するのは難しくありません。

使用することの他のいくつかの利点はQProcess、単体テストでのクラッシュまたはアサートによって GUI がダウンしないこと、および出力を混乱させることなく同時に複数のテストを実行できることです。

于 2012-05-29T00:20:01.927 に答える