2017-07-31 11 views
0

ですA:A :: PUBLIC :: SHOW..2がコンソールで表示されることを期待していましたが、メソッドが実際に返されるようにハードコードされているにもかかわらず、テストケースも失敗しました。テストケースは失敗した状態が、返される値はtrue

TEST(FirstA, TestCall) { 
    MockA a; 
    EXPECT_CALL(a, ShowPub2(2)) 
     .Times(AtLeast(1)); 
    a.ShowPub2(2); 
    EXPECT_TRUE(a.ShowPub2(2)); 
} 

GMOCKテストコード実行出力 - 私はいません出力A :: PUBLIC :: SHOW..2がコンソールおよびテストケースでレンダリングされなかった理由を確認してくださいに失敗しました:いくつかの明確化がここで必要とされている

[==========] Running 1 test from 1 test case. 
[----------] Global test environment set-up. 
[----------] 1 test from FirstA 
[ RUN  ] FirstA.TestCall 
c:\users\user1\documents\c and c++\gmock\gmock1\gmock1\gmock1.cpp(78): error: 
Value of: a.ShowPub2(2) 
    Actual: false 
Expected: true 
[ FAILED ] FirstA.TestCall (0 ms) 
[----------] 1 test from FirstA (0 ms total) 

[----------] Global test environment tear-down 
[==========] 1 test from 1 test case ran. (0 ms total) 
[ PASSED ] 0 tests. 
[ FAILED ] 1 test, listed below: 
[ FAILED ] FirstA.TestCall 

1 FAILED TEST 
Press any key to continue . . . 



int main(int argc, char** argv) 
{ 
    ::testing::InitGoogleTest(&argc, argv); 
    return RUN_ALL_TESTS(); 
    return 0; 
} 
+0

模擬メソッドは、仮想:https://github.com/google/googlemock/blob/master/googlemock/docs/ForDummies.mdである必要があります。 – Gluttton

+0

私は両方の方法をバーチャルとして作りましたが、それと同じ問題です。何か不足していますか?仮想ボイドShowPub1(){}と仮想int ShowPub2(int x){} – Prakash

答えて

1

..

Mockクラスがあることを意味作成しますMockメソッドは独自の実装で生成されます。コード

MOCK_METHOD0(ShowPub1, void()); 
MOCK_METHOD1(ShowPub2, int(int x)); 

のこれらの行は、それがShowPub1/ShowOub2の親の実装を呼び出すという意味ではありません。これは、あなたが嘲笑しているクラスのシグネチャと同じシグネチャを持つ関数(Mock)を得ることを意味します。

テストが原因でこのラインの失敗

EXPECT_TRUE(a.ShowPub2(2)); 

元の実装が呼び出されていないので、この関数は失敗します。テスト機能が

TEST(FirstA, TestCall) { 
    MockA a; 
    EXPECT_CALL(a, ShowPub2(2)) .Times(AtLeast(1)); 
    a.ShowPub2(2); 
    } 

のように記述する必要があります

ここでは、関数が少なくとも一度呼び出され、テストはそれで成功すること振る舞いをテストしています。

関数の機能をテストする場合は、別々のテストを記述します。この場合、黙っても問題は解決しません。

+0

ありがとう - 私たちはいつ関数を模擬しますか? – Prakash

+1

模擬は主にインターフェイスの動作をテストするために使用されます。例えば、クラスAを期待する関数に 'Mock a'を渡します。この内部では、 'クラスA'で定義された関数を使用するいくつかの機能を実行できます。モッキングは、同じことを確認するためのものです。 'EXPECT'を使って関数の振る舞いを確認してください –

+0

クラスメソッドの実装をテストするためのテストケースコードを提供してください。私は同じことを試みましたが、コンパイラは述べました - "エラーC2039: 'gmock_ShowPub2':EXPECT_CALL行の 'A'のメンバーではありません(a、ShowPub2(2))。私がMOCKクラスを作成せず直接テストケースを書くとき – Prakash

関連する問題