3

私は Qt を初めて使用し、Qt テストの単体テスト フレームワークを検証中です。Qt5.5を使用しています。Qt マクロを使用してテスト ケースを作成し、Qt Creator から実行できますが、コマンド プロンプトから実行すると問題が発生します。具体的には、Qt Test が提供するログ オプションを使用できません。

これが私がやっていることです:

  1. Qt Creator を使用して Qt Test プロジェクトを作成しました
  2. Qt Creator を使用してプロジェクトをビルドする
  3. 実行可能ファイルは「project_directory/debug」フォルダーに作成されます
  4. デバッグ フォルダーからコマンド プロンプトを開く
  5. 次のコマンドを実行します。

QtTestValidation5.exe –xml
QtTestValidation5.exe -o results.txt、txt

  1. すべてのテストが実行されますが、フォルダには何も保存されません

テスト結果を xml、csv、およびテキスト ファイル形式で記録したいと考えています。誰か助けてくれませんか?

4

1 に答える 1

3

最初のオプションは、テスト結果を XML 形式で stdout に出力する必要があります。自分のライブラリでテストしたところ、動作します。連結された複数の XML ドキュメントを出力しますが、これはおそらく、複数のテストを手動で実行する非標準main()を使用しているためであり、それらのそれぞれに対して 1 つの XML ドキュメントが生成されるようです。

-o results.txt,txt2 番目のものはおそらく間違っています: (スペースなし) のはずです。私と同じように機能しますが、最後のテストのみを記述します。繰り返しますが、これはおそらく、いくつかのテストを手動で実行しているためです。そのため、それぞれが前のテストを上書きし、最後のテストしか表示されません。すべてのテストを保存したい場合は、-xmlor-txtを使用して形式を指定し、標準出力にリダイレクトする必要があります。

qztest.exe -xml > results.xml

これは機能しますが、1 つのファイルに複数の連結されたドキュメントをまだ取得しています。

-csvオプションは機能しませんが、Qtのドキュメントはこう言います

このモードは、通常の合格/不合格メッセージを抑制するため、ベンチマークにのみ適しています。

そして、私にはベンチマークがありません。

引数が私にとってうまくいく理由については、ここに私のmain()

int main(int argc, char **argv)
{
    QCoreApplication app(argc, argv);
    int err = 0;
    {
        TestQuaZip testQuaZip;
        err = qMax(err, QTest::qExec(&testQuaZip, app.arguments()));
    }
    {
        TestQuaZipFile testQuaZipFile;
        err = qMax(err, QTest::qExec(&testQuaZipFile, app.arguments()));
    }
    // And so on, and so on...
    if (err == 0) {
        qDebug("All tests executed successfully");
    } else {
        qWarning("There were errors in some of the tests above.");
    }
    return err;
}

非常に重要な -を作成しQCoreApplication、引数を手動で に渡しますQText::qExec。Qt Creator でプロジェクトを作成したので、main(). Qt Creator が何かを正しく初期化していない可能性があります。引数が機能するためには、テスト コードがこれらの引数に実際にアクセスできる必要があることを忘れないでください。したがって、それらを明示的に渡すか、少なくともアプリケーションを初期化して、コードがQCoreApplication::instance()->arguments()内部的に何かを実行できるようにする必要があります。

于 2016-01-12T17:50:41.650 に答える