2017-04-02 389 views
0

我是gmock測試的新手。我有Foo類,它具有成員函數set()和start()。開始()觸發set()和類成員member1設置爲1,member2設置爲2.當我嘗試在gmock中測試這我看不到這些成員設置。爲什麼,我該如何解決這個問題?謝謝。gmock EXPECT_CALL不調用測試類中的方法

test.h文件

#ifndef TEST_H_ 
#define TEST_H_ 


#include <gtest/gtest.h> 
#include <gmock/gmock.h> 


class Foo 
{ 
public: 
    Foo(); 
    virtual~Foo(); 
    int member1; 
    int member2; 
    virtual void set(); 
    virtual void start(); 
}; 

class MockFoo:public Foo 
{ 
public: 
    MOCK_METHOD0(set, void()); 

}; 

#endif /* TEST_H_ */ 

simpleGmock.cpp文件

#include <stdio.h> 
#include <stdlib.h> 
#include "test.h" 

using ::testing::AtLeast; 
using ::testing::Return; 


Foo::Foo(){}; 
Foo::~Foo(){}; 
void Foo::set() 
{ 
    member1=1; 
    member2=2; 
} 
void Foo::start() 
{ 
    this->set(); 
} 

TEST(simplesuite, callmethods) 
{ 
    MockFoo mockfoo_obj; 

    EXPECT_CALL(mockfoo_obj, set()) 
      .Times(AtLeast(1)) 
      .WillOnce(::testing::Return()); 

    mockfoo_obj.start(); 

    ASSERT_EQ(mockfoo_obj.member1,1); 


} 
int main(int argc, char *argv[]) { 
    ::testing::InitGoogleMock(&argc, argv); 
    return RUN_ALL_TESTS(); 
} 

,其結果是下面:

[==========] Running 1 test from 1 test case. 
[----------] Global test environment set-up. 
[----------] 1 test from simplesuite 
[ RUN  ] simplesuite.callmethods 
simpleGmock.cpp:39: Failure 
     Expected: mockfoo_obj.member1 
     Which is: -528070912 
To be equal to: 1 
[ FAILED ] simplesuite.callmethods (0 ms) 
[----------] 1 test from simplesuite (0 ms total) 

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

1 FAILED TEST 

回答

0

嘗試刪除.WillOnce(::testing::Return()),因爲它會導致Foo::set()不被因爲你在嘲笑這個功能。

您可能需要在EXPECT_CALL之後手動調用Foo :: set(),因爲在模擬一個方法後,重寫的函數不再被調用。嘗試添加.WillOnce(Invoke(this, &Foo::set))

+0

它也沒有工作。 –

相關問題