2017-03-28 6 views
0

を持つ次のような状況のために、私は2つのファイル(私は立ち往生し、それ以上を取得していないです)デザインは私の現在の実装ではGTEST手順

//firstFile.cpp 
class first 
{ 
    //some object of xyz class 
}; 

first f; //global 

TEST(Suite, Testcase 
{ 
//do something 
} 



//secondFile.cpp 
class second 
{ 
public: 
//some data members 

void function() 
} 

タスクがあります - 私は(それ特殊機能を検討TESTを呼びたいと、テストでは、後の処理のためにいくつかのデータを保存したいと思います。これは、すべてのTEST呼び出しで初期化されるため、ファーストクラスではできません。

問題: - データ構造を保存する必要がある別のクラス(別の.cppファイル)を持っていますが、私はそれらのd TESTプロシージャの構造体に保存し、すべてのTEST呼び出しで以前のデータにデータを追加し続ける。私はfirstFile.cppで2番目のクラスのオブジェクトを作成することはできません。これは、すべての呼び出しで作成/破棄されるためです。

提案がありますか?また、私はTEST procdedureについて何もすることはできませんが、これはそうです。

答えて

1

gtestでは、テストフィクスチャを定義できます。これは、一連のテストのコンテキストを定義するのと同じです。各テストの前後にSetUp/TearDownの手段を提供するだけでなく、テストスイートの実行前/実行後にも意味を持ちます。 SetUpTearDownは大文字と小文字が区別されることに注意してください。

struct MyFixture : testing::Test 
{ 
private: 
    // stuff 
protected: 
    //! Called before running all tests 
    static void SetUpTestCase(); 
    //! Called after running all tests 
    static void TearDownTestCase(); 

    //! Called before each test 
    void SetUp() {} 
    //! Called after each test 
    void TearDown() {} 

public: 
    static SomeSharedObject& GetSharedObjInTest() {} 
}; 

とテストケースには、あなたは、単に、その治具の内側firstの静的インスタンスを作成します(セットアップ内でそれを初期化)とアクセスに静的ゲッターを使用することができ

TEST_F(MyFixture, MyTest_Name) 
{ 
// some cool stuff here 
} 

を呼び出す必要がありますそれはあなたのさまざまなテストの中から。

すでに `セットアップ()`と `ティアダウン()`メソッドで使用するサポートルーチンの多くを開発している場合は、上記の溶液は、それらがまた静的作る必要はありません文書gtest - Sharing resources between tests in the same test case

+0

を参照してください。これらの機能を利用するには?実際、これは実用的な解決策ではありません。なぜGTestにConstructorとDestructorの機能を反映する 'SetUp()'と 'TearDown()'メソッドが含まれているかはまだ分かりません。エレガントな世界では、ConstructorとDestructorは、すべてのテストケースに共通するすべてのリソースを初期化することによって、static void setUpTestCase()とstatic void TearDownTestCase()の目的に役立つことができました。 – Sampath

関連する問題