CATCH v1.1ビルド14を使用してC++コードの単体テストを行っています。Catch.hppユニットテスト:テストケースを動的に作成するには?
テストの一環として、私のコードでいくつかのモジュールの出力を確認したいと思います。設定された数のモジュールはありません。いつでも多くのモジュールを追加することができます。ただし、各モジュールをテストするコードは同じです。したがって、テストコードをループに入れておくことが理想的だと思います。実際、catch.hpp
を使用して、各セクションがモジュールに対応するテストケース内でセクションを動的に作成できることを確認しました。私は、例えば、forループでSECTION
マクロを囲むことによってこれを行うことができます。
#include "catch.hpp"
#include <vector>
#include <string>
#include "myHeader.h"
TEST_CASE("Module testing", "[module]") {
myNamespace::myManagerClass manager;
std::vector<std::string> modList;
size_t n;
modList = manager.getModules();
for (n = 0; n < modList.size(); n++) {
SECTION(modList[n].c_str()) {
REQUIRE(/*insert testing code here*/);
}
}
}
(これは完全な作業例ではありませんが、あなたはアイデアを得る)
をここに私のジレンマです。あるモジュールが故障すると、テストを中止する代わりに他のモジュールをテストし続けるように、モジュールを個別にテストしたいと思います。しかし、CATCHが動作する方法は、単一のREQUIRE
が失敗した場合、テストケース全体を中止します。このため、個別のセクションだけでなく、モジュールごとに個別のテストケースを作成したいと考えています。 (私は期待通りに)私はTEST_CASE
マクロの外に私のfor
ループを入れてみましたが、このコードはコンパイルに失敗します。
#include "catch.hpp"
#include <vector>
#include <string>
#include "myHeader.h"
myNamespace::myManagerClass manager;
std::vector<std::string> modList;
size_t n;
modList = manager.getModules();
for (n = 0; n < modList.size(); n++) {
TEST_CASE("Module testing", "[module]") {
SECTION(modList[n].c_str()) {
REQUIRE(/*insert testing code here*/);
}
}
}
writing my ownmain()
ことによってこれを行うことが可能かもしれないが、私が何をどのように見ることができませんそれは正確に。 (私は別のファイルに自分のTEST_CASE
コードを維持したい場合、私はmain()
に直接私のTEST_CASE
コードを入れますか?何を?また、それは私の他、より標準的なテストケースに影響を与えるのでしょうか?)
私もCHECK
マクロを使用することができますREQUIRE
マクロの代わりに、モジュールが失敗したときにテストケースを中止するのを避けるために、反対の問題が発生します。早期に失敗したモジュールでテストを続行しようとします。各モジュールを独自のテストケースに入れれば理想的な動作になります。
CATCHでテストケースを簡単に作成する方法はありますか?もしそうなら、あなたは私にそれを行う方法の例を教えてもらえますか?私はCATCHのドキュメントを読んでオンラインで検索しましたが、これを行う方法の兆候は見つかりませんでした。
私はあなたの最初の提案を使用しています。理想的には、実行時に動的にモジュールを検出し、それぞれに対してテストケースを生成したいと思いますが、Catchではそれが不可能だと考え始めています。背景:モジュールは、私が定義した抽象基本クラスから派生クラスを定義します。それらは異なる出力を生成するが、出力をチェックする手順は同じである。他の開発者は独自のモジュールを追加するので、独自のモジュールでコンプライアンスをチェックするためにテスト機能を使用できるといいでしょう。たぶん私は間違っているが、私はより良い方法を見ていない。 –
Googleグループの詳細については、https://groups.google.com/forum/#!searchin/catch-forum/section/catch-forum/mRBKqtTrITU/FoHEoMn3SN8Jをご覧ください – JBRWilkinson