1

複数のファイル内の複数のテストで、各テストに同じ期待値を設定する別のファイルから個別にコンパイルされたユーティリティ メソッドを呼び出せるようにしたいと考えています。ただし、Hippomocks では、異なるソース ファイルで同じ MockRepository に対する期待値を設定することに問題があるようです。

簡単な例を次に示します。

file1.cpp は次のとおりです。

void SetOtherExpectations(MockRepository &mocks);

int Method45()
{
    return -45; 
}
int Method88()
{
    return -88;
}

TEST(TestOfSettingValueInAnotherSourceFile)
{
    MockRepository mocks;
    mocks.OnCallFunc(Method45).Return(45);
    mocks.OnCallFunc(Method88).Return(88);
    SetOtherExpectations(mocks);
    testEqual(45, Method45()); // Failed Condition: (Expected: <45>, actual: <8888>
}

file2.cpp は次のとおりです。

int MethodInt(int)
{
    return -145;
}
int MethodChar(char)
{
    return -188;
}

void SetOtherExpectations(testFramework::MockRepository &mocks)
{
    mocks.OnCallFunc(MethodChar).Return(8888); // Line A
    mocks.OnCallFunc(MethodInt).Return(9999); // Line B
}

行 A と行 B を入れ替えると、Method45 呼び出しは 9999 を返します。 Method45 呼び出しが行われると、一致する期待値の検索で、file1 から正しいモック関数が見つかる前に、file2 で最初のモック関数が見つかることがわかります。

MockRepository には 4 つのモック メソッドがありますが、ヒッポモックはfuncIndexソース ファイルごとに値を割り当てます。これは、__COUNTER__プリプロセッサ変数 (各ソース ファイルで 0 から始まり、その中で使用されるたびに 1 ずつ増加する変数) を使用するためです。ソース ファイル) を RegisterExpect の呼び出しで使用します。したがって、個別のソース ファイル内の後続の各期待値設定は、そのインデックスで設定された以前の期待値をすべて「隠します」。

個別にコンパイルされた各ソース ファイルに期待値を設定するすべてのユーティリティ関数をインライン コードとして含める必要があるようですが、これは優れたソリューションではありません。これを行う他の方法はありますか?

4

0 に答える 0