QTest
は、単体テストを別々の実行可能ファイルとして編成することをお勧めします。これには特別なマクロがあり、メイン関数を生成します:QTEST_MAIN
。qExecを使用してQtテストスイートを作成する
私はこのアプローチがあまりクリーンではないことを発見しました。すべてのテストを一度に実行するほうがずっと便利です。
Qt: run unit tests from multiple test classes and summarize the output from all of them
http://www.davideling.it/2014/01/qtest-multiple-unit-test-classes/
https://alexhuszagh.github.io/2016/using-qttest-effectively/
ソリューションは、マクロQTEST_MAIN
を使用してあきらめました:だから私はそうすることのいずれかの可能性がある場合は検索し、私は少数の人々が同じ解決策を提案しました実行するテストを実行する場所に独自のmain
関数を記述します。
int main(int argc, char *argv[])
{
int status = 0;
{
TestA ta;
status |= QTest::qExec(&ta, argc, argv);
}
{
TestB tb;
status |= QTest::qExec(&tb, argc, argv);
}
return status;
}
私はそれが素晴らしい考えであることを発見しましたが、問題があります。 qExec
ためQt's documentationは、このように聞こえる部分があります:スタンドアロンのテストアプリケーションの場合
を、この機能は ファイルにテスト出力をログに記録し、個人を実行するためのコマンドラインオプションとして、何度も 多くを呼び出すことはできませんテスト機能は 正しく動作しません。
これらの人々が明らかにした解決策は、次のように示唆しています。qExec
を複数回実行する。誰も正確に何を私に説明することができますcommand-line options for logging test output to files and executing individual test functions will not behave correctly
正確に意味ですか?
このアプローチで間違っているのはどういうことでしょうか?
FWIW、この明白な欠陥は私にも困惑しています。別のテストランナーフレームワーク(例:GoogleTest)を使用します。スロットと信号用のQt固有の機械と組み合わせることができます(https://stackoverflow.com/a/12687255/14637)。また、https://stackoverflow.com/a/3804999/14637のコメントがあなたの質問に答えるかもしれません。 – Thomas