2017-05-04 15 views
1

私は2つのモックを持っています。それらのうちの1つだけが1回の実行のために呼び出されなければならず、​​機能が成功したかどうかを特定の前提条件から知るために期待したいと思います。
これはどのように達成できますか?google mock expect_callが別の期待を退職する

Mock1 successMock; 
Mock2 failMock; 

EXPECT_CALL(successMock, performOnSuccess()).Times(1); 
EXPECT_CALL(failMock, performOnFail()).Times(0); 
execute(successMock, failMock); 

上記のいずれかが有効またはそれ未満であるべきですが、どちらか一方のみである必要があります。

あなたはが呼び出された協力者の(一つだけ)ということで期待し
EXPECT_CALL(successMock, performOnSuccess()).Times(0); 
EXPECT_CALL(failMock, performOnFail()).Times(1); 
+0

私はあなたのケースをよく理解できません。もう少し詳しく説明できますか? 2つの異なるテストケースからのこれらの期待はありますか? 私が理解しているところでは、 'execute'を呼び出すときに何が起こるのか不明です。私はこれがモックのユースケースだとは思わない... –

+1

私は両方の期待セットを有効にしたいと思います同じテストケースでは、しかし排他的に、あなたが言うように私は実行の結果が何であるか分かりませんが、私はモックのうちの1つだけが呼ばれるべきだと知っています –

答えて

1

一つの実行可能な解決策は、(other languagesに示されるように)インクリメント試験範囲内の共有カウンタこれらモックを作ることです。

これはGoogleMockでdefining actionsで実現できます。それはこのようなものになるだろう:

SuccessMock successMock; 
FailMock failMock; 

int callCounter = 0; 


ON_CALL(successMock, performOnSuccess()) 
    .WillByDefault(InvokeWithoutArgs([&]() 
       { 
        callCounter++; 
       }); 

ON_CALL(failMock, performOnFailure()) 
    .WillByDefault(InvokeWithoutArgs([&]() 
       { 
        callsCounter++; 
       }); 


execute(successMock, failMock); 

ASSERT_THAT(callsCounter, Eq(1)); 

これを言って、このテストでは、私が本当に好きではないということで、いくつかのランダム性を持っています。あなたは、失敗を期待する1つのテストと、成功を期待するもう1つのテストを終わらせるべきです。

私はこれを簡略化して書いたgistです。

関連する問題