2016-08-08 1 views
2

これは達成したいことです。私のテストフィクスチャでは、パラメータフィラーnを使ってヘルパー関数を呼び出して、テストフィクスチャにいくつの初期化シーケンスが必要かを伝えたいと考えています。シーケンスで使用されるいくつかのパラメータは、3つのコンテナに格納されます。 fileDescriptor, handle, selectionObject。それは働いていない理由を私は知っているループ内に予想されるコールを追加する

void MyTest::init_Ok(uint32_t n) 
{ 
    for (uint32_t i = 0; i < n; ++i) 
    { 
    fileDescriptor.push_back(i); // FDs starting at 0 
    handle.push_back(reinterpret_cast<void*>(18 + i)); // handles starting at 18 
    selectionObject.push_back(555 + i); // SOs starting at 555 

    EXPECT_CALL(MyMockApi::getApi(), initialize(Pointee(nullptr), StrEq("InitString"), MyMatcher())) 
     .WillOnce(DoAll(SetArgPointee<0>(handle[i]), 
         Return(INIT_OK))); 
    EXPECT_CALL(MyMockApi::getApi(), selectionObjectGet(handle[i], Pointee(nullptr))) 
     .WillOnce(DoAll(SetArgPointee<1>(selectionObject[i]), 
         Return(SELECTION_OK))); 
    EXPECT_CALL(MyMockApi::getApi(), finalize(handle[i])) 
     .WillOnce(Return(FINAL_OK)); 
    } 
} 

私は何を書かれていることはこれです。 initializeへのすべての呼び出しは同じであると予想されますが、第1、第2、第3、...、第n番目の呼び出しに対して異なるアクション(ループカウンタiに依存するパラメータ)を実行したいと考えています。現在の実装では、パラメータnによるinitializeへの1回の呼び出しのみが期待されます。これを修正して何らかの形でループを維持することは可能ですか、またはそれぞれiに対してWillOnce行のアクションを追加する必要がありますか?これは、私がnをチェックして、の異なる番号をnという異なる値に追加しなければならないことを意味します。これは避けたいものです。

答えて

2

一方向はInvokeです。ハンドルコンテナにアクセスできる関数と、関数がヒットした回数を示す実行中のメンバ/静的変数(counterVarと言う)を書くことができます。 counterVarの値に基づいて、ロジックを決定することができます。

.WillRepeatedly(Invoke(<your function>)) 

何かのように:

EXPECT_CALL(MyMockApi::getApi(), initialize(Pointee(nullptr), StrEq("InitString"), MyMatcher())) 
     .WillRepeatedly(Invoke(successfulInitialize)); 

ReturnCode successfulInitialize(void* op, std::string msg) 
{ 
    static int counterVar = 0; 
    *op = handles[counterVar++]; 
    return INIT_OK; 
} 
+0

おかげで、私は最終的に仕事にこれを得ました – Martin

関連する問題