入門チュートリアルをキャッチ

チュートリアルをキャッチ(はじめに、公式文書翻訳)

  1. キャッチ得
  2. どのように使用するには?
  3. テストケースを書きます
  4. テストケースとテストゾーン
  5. BDDスタイル
  6. 概要
  7. テストのパラメータタイプ
  8. その後の学習と使用

キャッチ得

最も簡単な方法は、最新のダウンロードにある1つのヘッダーバージョン他のいくつかの独立したヘッダファイルのこのヘッダファイル合併。

また、このような編集ソフトウェアをスピードアップすることができますキャッチのコンパイルされたバージョンを、構築するためにCMakeのを使用して、キャッチを取得するために他の方法を使用することができます。

キャッチなどの文書の内容は、GitHubのから完全Catch2をダウンロードすることができていることを示す、完全なテストが含まれています。Catch2公式のリンクがある:http://catch-lib.net、このリンクは、GitHubのにリダイレクトされます。

どのようにキャッチを使用するには?

キャッチは、ヘッダのみです。あなただけの両方へのパスを見つけることができますコンパイラにヘッダファイルをキャッチする必要があります。

あなたがキャッチを見つけて使用することができ、次のチュートリアルデフォルトコンパイラ。

*あなたがコンパイルされたコンパイル済みのフォームキャッチを使用してキャッチリンクライブラリ(.libファイルや.Aファイル)を生成する場合、フォームは次のようにキャッチヘッダファイルが含まれている必要があります。#include <catch2/catch.hpp>

テストケースを書きます

簡単な例(例/ 010-TestCase.cpp)から始めましょう。あなたは階乗を計算するために使用される機能を書いていると仮定し、今それをテストする準備ができています。(TDDの基本原理に関わらずどここの最初のテストコードを書くことです)

unsigned int Factorial( unsigned int number ) {
    return number <= 1 ? number : Factorial(number-1)*number;
}

物事をシンプルに保つために、我々は、ファイルにすべてのコードを置きます。

#define CATCH_CONFIG_MAIN  // 当前宏强制Catch2在当前编译单元中创建 main(),这个宏只能出现在一个CPP文件中,一个项目只能有一个有效的main函数
#include "catch.hpp"

unsigned int Factorial( unsigned int number ) {
    return number <= 1 ? number : Factorial(number-1)*number;
}

TEST_CASE( "Factorials are computed", "[factorial]" ) {
    REQUIRE( Factorial(1) == 1 );
    REQUIRE( Factorial(2) == 2 );
    REQUIRE( Factorial(3) == 6 );
    REQUIRE( Factorial(10) == 3628800 );
}

コンパイラの終わりにはパラメータを受け入れることができ、実行可能ファイルを生成した後、特定のパラメータ利用可能command-line.mdを参照してください。実行可能ファイルが引数なしで実行する場合は、テストケースのすべてが実行されます。詳細なテストレポートは、端末への出力、テストケース、失敗したテストケースの数、例えば、成功したテストの失敗の数などです。

上記の実行可能なコード生成の実装は、すべてのテストケースが渡されます。実際にはエラーコード?いいえ、上記の階乗関数は、私がこのチュートリアルバグの最初のバージョンを書いた、間違っている、感謝CTMacUserは私がこの間違いを指摘するのに役立ちます。

このエラーは、それは何ですか?0階乗はどのくらいですか?--0階乗階乗関数の上部に間違っている、1の代わりに0です。
0の階乗は1です

私たちはテストケースに上記の規則を書いてみましょう:

TEST_CASE( "Factorials are computed", "[factorial]" ) {
    REQUIRE( Factorial(0) == 1 );
    REQUIRE( Factorial(1) == 1 );
    REQUIRE( Factorial(2) == 2 );
    REQUIRE( Factorial(3) == 6 );
    REQUIRE( Factorial(10) == 3628800 );
}

今、テストが失敗した、Catch2はおそらく出力は以下となります。

Example.cpp:9: FAILED:
  REQUIRE( Factorial(0) == 1 )
with expansion:
  0 == 1

Catch2出力階乗0の(0)の値、我々は簡単にエラーを見つけることができるようにします。

私たちは、階乗関数を修正してみましょう:

unsigned int Factorial( unsigned int number ) {
  return number > 1 ? Factorial(number-1)*number : 1;
}

これで、すべてのテストケースは合格しています。

もちろん、上記の階乗関数は、まだ我々一時的にかかわらず、このような計算結果として多くの問題、オーバーフローの数が多いです。

私たちは何をしましたか?

上記のテストは比較的単純な、しかし十分ですがCatch2を使用する方法を示します。先に進む前に、説明しましょう。

  1. 我々は、ヘッダファイルCatch2を含み、次いで、コンパイル単位をコンパイルし、パラメータを受け取り、実行可能ファイルを生成するマクロを定義します。通常、他のテストファイルのヘッダのみファイルを含む、マクロファイルのヘッダを(任意のテストコードが含まれていない)を含む別のコンパイル単位で定義されてお勧めします。あなたは、あなた自身の主な機能を(own-main.md参照)書くことができます。

  2. 我々マクロTEST_CASE書かれたテストケース。このマクロは、1つのまたは2つのパラメータを含むことができ、パラメータは、試験の固定フォーマット名ではない、他のパラメータは、(後述する)1つ以上のタグを含みます。テスト名は一意である必要があります。あなたは指定することによって、テストのセットを実行することができますワイルドカードのテスト名またはタグ式を。リファレンスは、取得するために、実行可能ファイルの実装の詳細についてはcommand-line.md。

  3. テスト名とラベルは文字列です。(翻訳者注:オリジナルのテキストは、使用にはほとんど影響を持っているこのセクションでは、また、それが翻訳されていません)

  4. 私たちは、マクロを使用しREQUIREたテストアサーションを記述すること。離散関数を使用せずCatch2は異なるアサーション(等、より少ない、より例えば大きい)を示したが、直接C ++式の真の値の結果を使用して。さらにCatch2発現キャプチャテンプレート左右テスト式(例えば、を使用して、exp_a == exp_bそれによって試験報告書に両側に計算結果を表示します)。

テストケースとテストゾーン

テストフレームワークのほとんどは、クラスベースの機構を備えています。例えば、フレーム番号(例えば、JUnitの)ためにsetup()検査対象の位相を作成するが、他の実施形態で使用することができteardown()、各テストケースにおいて、それによって検査対象(またはモックオブジェクト)の作成および破壊を回避する、これらの標的の段階の破壊。

キャッチため、上記従来の試験方法の使用は、例えば、テスト粒径が比較的大きい、この場合には、テストオブジェクトとテストケースの同じ数を作成することができ、特定の欠点を有します。(翻訳者注:他の欠陥は、元と呼ばれます)

次のようにキャッチは、上記課題を解決するための新しい方法を使用します。

TEST_CASE( "vectors can be sized and resized", "[vector]" ) {

    std::vector<int> v( 5 );

    REQUIRE( v.size() == 5 );
    REQUIRE( v.capacity() >= 5 );

    SECTION( "resizing bigger changes size and capacity" ) {
        v.resize( 10 );

        REQUIRE( v.size() == 10 );
        REQUIRE( v.capacity() >= 10 );
    }
    SECTION( "resizing smaller changes size but not capacity" ) {
        v.resize( 0 );

        REQUIRE( v.size() == 0 );
        REQUIRE( v.capacity() >= 5 );
    }
    SECTION( "reserving bigger changes capacity but not size" ) {
        v.reserve( 10 );

        REQUIRE( v.size() == 5 );
        REQUIRE( v.capacity() >= 10 );
    }
    SECTION( "reserving smaller does not change size or capacity" ) {
        v.reserve( 0 );

        REQUIRE( v.size() == 5 );
        REQUIRE( v.capacity() >= 5 );
    }
}

それぞれについてSECTIONTEST_CASE再びからだろうTEST_CASEと実行開始の最初の部分他を無視しますSECTION(翻訳者注:この単純なテキストは、なぜ、キャッチは、if文と子ノードとして見セクションを使用について説明し、各実行キャッチは、子ノードを選択し、TEST_CASE時間を実行します)。

これまでのところ、キャッチは、クラス(セットアップ&ティアダウン)テストフレームワークのほとんどに基づいて上記のテスト・メカニズムを使用して達成されています。

SECTIONそれぞれ、任意の深さまでネストすることができSECTION、子ノードを1回だけ実行され、ネストされた多数のSECTION親ノードに障害が発生した「木」は、もはや対応する子を実行しませんフォームを:

    SECTION( "reserving bigger changes capacity but not size" ) {
        v.reserve( 10 );

        REQUIRE( v.size() == 5 );
        REQUIRE( v.capacity() >= 10 );

        SECTION( "reserving smaller again does not change capacity" ) {
            v.reserve( 7 );

            REQUIRE( v.capacity() >= 10 );
        }
    }

BDDスタイル

BDD-スタイルテストの形で使用することができるキャッチ、特異的に参照:test-cases-and-sections.md、以下の簡単な例です。

SCENARIO( "vectors can be sized and resized", "[vector]" ) {

    GIVEN( "A vector with some items" ) {
        std::vector<int> v( 5 );

        REQUIRE( v.size() == 5 );
        REQUIRE( v.capacity() >= 5 );

        WHEN( "the size is increased" ) {
            v.resize( 10 );

            THEN( "the size and capacity change" ) {
                REQUIRE( v.size() == 10 );
                REQUIRE( v.capacity() >= 10 );
            }
        }
        WHEN( "the size is reduced" ) {
            v.resize( 0 );

            THEN( "the size changes but not capacity" ) {
                REQUIRE( v.size() == 0 );
                REQUIRE( v.capacity() >= 5 );
            }
        }
        WHEN( "more capacity is reserved" ) {
            v.reserve( 10 );

            THEN( "the capacity changes but not the size" ) {
                REQUIRE( v.size() == 5 );
                REQUIRE( v.capacity() >= 10 );
            }
        }
        WHEN( "less capacity is reserved" ) {
            v.reserve( 0 );

            THEN( "neither size nor capacity are changed" ) {
                REQUIRE( v.size() == 5 );
                REQUIRE( v.capacity() >= 5 );
            }
        }
    }
}

上記のテストに次の出力を実行します:

Scenario: vectors can be sized and resized
     Given: A vector with some items
      When: more capacity is reserved
      Then: the capacity changes but not the size

概要

私たちは、ファイル内のすべてのコードを入れてシンプルチュートリアルを確保するために、これは、実際のプロジェクトでは良い方法ではありません。

より良い方法は、別のソースファイルに次のコードを記述することで、ファイルは、他のテストのキャッチヘッダファイルとテストコードが含まれています。次の書類を含め、他のテストでは繰り返さない#define文を。

#define CATCH_CONFIG_MAIN
#include "catch.hpp"

ヘッダファイルにテストコードを記述しないでください!

タイプパラメトリック検定

Catch2サポートパラメータ化試験、マクロの種類TEMPLATE_TEST_CASE及びTEMPLATE_PRODUCT_TEST_CASE動作とTEST_CASE同様であるが、テストケースの指定されたタイプのそれぞれは、再度実行されます。

詳細については、以下を参照してくださいタイプparametrisedテスト・ケースのセクションでtest-cases-and-sections.mdを

その後の学習と使用

現在の文書がキャッチの概要を説明し、キャッチにもいくつかの違いや他のテストフレームワークを指摘しました。このような知識は、あなたはすでにいくつかの実際のテストケースを書くことができます。

もちろん、学ぶべき多くのものがありますが、あなただけのこれらの新機能を使用する際に学ぶ必要があります。あなたがReadme.mdで見つけることができるすべての機能をキャッチ。

おすすめ

転載: www.cnblogs.com/jiahu-Blog/p/11323868.html