0

さまざまな場所に投稿されたさまざまな回避策を見てきましたが、さまざまなクラスのさまざまなテストで機能する単一のテスト実行を作成するときmainに、Qt マクロに依存する代わりにカスタム関数を作成することを提案しています。QTEST_MAIN()

私が間違っていたら訂正してください。しかし、テスト クラスを 1 つだけにして、必要な数のクラスをテストするために必要な数のスロットを用意することはできませんか? スロットの実装内でテストしたいクラスをインスタンス化し、そのスロットでテストを実行するだけです。次に、別のスロットが別のクラスをインスタンス化し、別のテストを実行する可能性があります。シングルQTEST_MAINはすべてのスロットテストを実行することになっているので、すべてがテストされますよね?

以下は、私が読んだ中で使用しない代替手法の一部ですQTEST_MAIN

https://sites.google.com/a/embeddedlab.org/community/technical-articles/qt/qt-posts/creatingandexecutingasingletestprojectwithmultipleunittests

https://stackoverflow.com/a/12207504/768472

4

1 に答える 1

2

もちろん、テストクラスには好きなだけスロットを設定できます。しかし、テストが多すぎてすべてを 1 つのクラスに配置できないという理由だけで、遅かれ早かれ、テストを分離してグループ化する必要があります。また、いくつかのテスト クラスを作成する必要があります。

関数の本来の目的は、QTEST_MAIN1 つのテストのみを実行することです。複数のクラスをテストする必要があり、互いに独立して実行できる場合は、それらを個別のテスト クラスに配置し、QTEST_MAINそれぞれにマクロを追加して、各クラスを個別の実行可能ファイルにコンパイルできます。プラスは、1 つのテスト ケースがクラッシュしても、他のテストは適切に実行し続けることです。欠点は、すべてのテストを実行してその結果を確認するためにテスト ランナーが必要であり、qtestlib はランナーを提供しないことです。独自のランナーを作成するか、既存のもの ( example ) のいずれかを使用できます。

オプションは次のとおりです。

  • QTestLib のパラダイムに従います。他のテストが原因でテストが失敗するのを防ぐために、テストを異なる実行可能ファイルに分けます。
  • すべてのテストを 1 つのクラスに格納します。アプリが小さくない場合、これは非常に不便です。
  • カスタム main 関数を使用してすべてのテストを手動で実行します。それほど悪くはありませんが、手動でテスト クラスをリストする必要があるため、不便でもあります。
  • 別のテスト ライブラリを使用します。私はGoogle Testの方が好きです。qtestlib よりもはるかに強力で、death テストをサポートし、テストを自動的に登録して実行し、その結果をカウントします。グーグルテストではそのような問題はありません。QSignalSpy多くの便利な qtestlib 機能 ( など) を別のテスト フレームワークと共に使用できることに注意してください。
于 2013-10-08T18:47:52.570 に答える