2017-09-13 96 views
-1

我一直在试图使用GoogleMock重写底层类中的几个特定方法,但是我似乎正在获取基础构造函数,而不是模拟对象。有什么明显的我在这里失踪?为什么GoogleMock嘲笑的原始方法仍然被调用?

我一直在关注下面的例子: http://blog.divebomb.org/2011/07/my-first-c-cmake-googletest-and-googlemock/

然而,在我的测试,我仍然得到我的所谓“printf的”。有什么想法吗?

下面是类/头文件:

A.H

#pragma once 
class A 
{ 
public: 
    virtual void methodToOverride(); 
    void someConcreteMethod(); 

    int mMemberVariable; 
}; 

A.cpp

#include "A.h" 

void A::methodToOverride() 
{ 
    std::printf("Hello World"); 
} 

void A::someConcreteMethod() 
{ 
} 

B.h

#include "A.h" 

class B 
{ 
public: 
    B(A &injectedClass); 
    ~B(); 
    void MethodToTest(); 

private: 
    A mA; 
}; 

B.cpp

#include "B.h" 

B::B(A & injectedClass):mA(injectedClass) 
{ 
    mA.someConcreteMethod(); 
} 

B::~B(){} 

void B::MethodToTest() 
{ 
    mA.methodToOverride(); 
} 

MockA.h

#include "A.h" 
#include "gmock\gmock.h" 

class MockA : public A 
{ 
public: 
    MOCK_METHOD0(methodToOverride, void()); 

}; 

BTest.cpp:

#include "gtest/gtest.h" 
#include "MockA.h" 
#include "B.h" 

using ::testing::AtLeast; 
using ::testing::_; 

TEST(BTest, mockObject) 
{ 
    // Arrange 
    MockA injectedMock; 
    EXPECT_CALL(injectedMock, methodToOverride()) 
     .Times(AtLeast(1)); 

    B classUnderTest(injectedMock); 

    // Act 
    classUnderTest.MethodToTest(); 
} 
+0

@Someprogrammerdude重新发布了这个问题,删除原来的代码,在这里用确切的代码...如果你有任何见解,他们将不胜感激! – Aerophilic

+0

@doctorlove从上一问题转贴 – Aerophilic

+1

请不要删除并重新发布相同的问题。改为编辑现有问题。这也会将问题重新推回头版。 –

回答

0

的一个主要问题是,B::mA研究所A类的一个。它不知道任何关于儿童课程和对象的知识。

成员B::mA或者需要是多态性工作的引用或指针。

+0

所以......当我去参考/指针的道路,当这个方法没有被使用时这很好......但是当我尝试使用“EXPECT”调用时,它最终变得奇怪的堆栈错误(特别是堆栈指针周围的错误不正确匹配)。使用Google Mock有没有更好的方法来实现这一点? – Aerophilic

+0

添加了我作为基础使用的网站...任何想法将不胜感激.... – Aerophilic