1

テスト ケースでは、デバッグ モードで無効な入力に対してアサーションを生成する関数をテストしたいと考えています。残念ながら、これはCatchテスト ランナーを停止します。テストランナーが継続するように、このアサーションをバイパスする方法はありますか?

これが私のテストケースです:

 SCENARIO("Simple test case", "[tag]") {
    GIVEN("some object") {
        MyObject myobject;

        WHEN("object is initialized with invalid data") {
            // method init generates an assertion when parameters are invalid
            bool result = myObject.init(nullptr, nullptr, nullptr, nullptr);
            REQUIRE(false == result);

            THEN("data processing can't be started") {
            }
        }
    }
}
4

1 に答える 1

1

通常assert、マクロは次のようなことを行います

#define assert(e) ((void) ((e) \
  ? 0 
  : (void)printf ("%s:%u: failed assertion `%s'\n",  __FILE__, __LINE__, #e),
    abort(), // <-- this aborts you program after printf's above
    0        
)

このマクロはデバッグ ビルドで有効になります。詳細については、標準を調べてくださいassert.h

したがって、テスト ケースをリンクするバイナリ ライブラリがある場合は、開発チームに、アサートが有効になっていないリリース ビルドを提供しない限り、API の単体テストを実行できないことを伝える必要があります。負のテスト ケースの場合。

ヘッダーのみのライブラリをテストする必要がある場合、またはテストするソース コードに対してコンパイルする必要がある場合は、次のことを行う必要があります。

  1. -DNDEBUG を使用してテスト ケース/スイートをコンパイルします。および/または
  2. 独自のassertマクロを定義し(たとえば、キャッチするエラーをスローするため)、特定のマクロassert.hがすでに定義されているかどうかをテストし、再度定義しようとしないことを望みます(再び、コンパイラ/標準ライブラリで詳細を探します)assert.hヘッダ)
于 2016-09-20T10:41:07.693 に答える