15

Qt には が付属しており、公式のチュートリアルQTestなど、いくつかのドキュメントがあります。

ただし、QTest単体テストを個別の実行可能ファイルとして編成することをお勧めします。これには、次を生成する特別なマクロがありますmain()QTEST_MAIN()

正直なところ、私はこのアプローチが本当に嫌いです。一般に、最近の変更によって何も壊れていないことを確認するために、すべてのテストを一度に実行する方がはるかに便利です。場合によっては、一部のテストをマスクしたり、個別のテストを実行したりすると便利ですが、これは例外であり、規則ではありません。

そのため、すべてのテストを一度に実行したいと考えています。わかりました、次のmain()ように、必要なすべてのテストを実行する独自のテストを作成できます。

int main(int argc, char **argv)
{
   int status = 0;

   //-- run all tests
   {
      TestHTCodecISO14230 tc;
      status |= QTest::qExec(&tc, argc, argv);
   }

   {
      TestHTDataMsg tc;
      status |= QTest::qExec(&tc, argc, argv);
   }

   return status;
}

そして、すべてのテストを実行しますが、問題は、すべてのテストの便利な要約がないことです。上記の 2 つのテストについて、2 つの個別の要約があるとします。

********* Start testing of TestHTCodecISO14230 *********
Config: Using QtTest library 5.4.1, Qt 5.4.1 (i386-little_endian-ilp32 shared (dynamic) release build; by GCC 4.6.1)
PASS   : TestHTCodecISO14230::initTestCase()
PASS   : TestHTCodecISO14230::decode_summary()
PASS   : TestHTCodecISO14230::encode()
PASS   : TestHTCodecISO14230::decode_encoded()
PASS   : TestHTCodecISO14230::cleanupTestCase()
Totals: 5 passed, 0 failed, 0 skipped, 0 blacklisted
********* Finished testing of TestHTCodecISO14230 *********
********* Start testing of TestHTDataMsg *********
Config: Using QtTest library 5.4.1, Qt 5.4.1 (i386-little_endian-ilp32 shared (dynamic) release build; by GCC 4.6.1)
PASS   : TestHTDataMsg::initTestCase()
PASS   : TestHTDataMsg::test1()
PASS   : TestHTDataMsg::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted
********* Finished testing of TestHTDataMsg *********

エラーが発生した場合にゼロ以外が返されるという事実statusは確かに役立ちますが、要約もあればさらに役立ちます。

Totals: 8 passed, 0 failed, 0 skipped, 0 blacklisted

私が見るところ、それは不可能です: 成功、失敗、スキップ、およびブラックリストに登録されたテストの数をプログラムで取得する方法が見つかりません:qExec()は名前空間内の単なる関数であるQTestため、その後に追加情報を収集することは不可能です実行します。

出力文字列を解析することは可能ですが、うーん...

私には、それは悪いデザインのように見えます。QTestクラスとして作成し、そのインスタンスを作成して、それにいくつかのテスト クラスをフィードする方がおそらくはるかに優れているでしょう。次に、インスタンスからいくつかの追加情報を収集できます。

または、何かを見逃したのかもしれません。

問題はQTest、すべての単体テスト クラスの要約出力を取得することは可能かということです。

4

1 に答える 1