4

我想知道是否可以使用 HippoMock 模拟类的一部分。

例子

class aClass
{
public:
    virtual void method1() = 0;

    void method2(){ 
        do
            doSomething;      // not a functon 
            method1();
        while(condition);
    };
};

我想模拟方法1以测试方法2

显然我使用 HippoMock 并且我在方法 2 中有一个错误,所以我进行了单元测试以纠正它并确保它不会回来。但我找不到这样做的方法。

我试试这个

TEST(testMethod2)
{
    MockRepository mock;
    aClass *obj = mock.Mock<aClass>();
    mock.ExpectCall(obj , CPXDetector::method1);
    obj->method2();
}

本机 cpp 有一些解决方案吗?使用其他模拟框架?

非常感谢

安布罗斯·佩蒂特热内

4

1 回答 1

1

这个答案有两个部分。首先是,是的,这很容易做到。其次,如果您需要以这种方式构建测试,您通常会遇到不幸的类设计——这通常发生在您需要对遗留软件进行测试时,而类设计无法合理地修复。

如何测试这个?据我所知,您可以为此使用 Hippomocks,但由于我有一段时间没有使用它,所以我不记得该怎么做。因为您要求任何解决方案,即使是使用不同框架的解决方案,我建议使用直接方法而不是使用 hippomock:

class bClass : public aClass
{
    int _counter;
public:
    bClass() : aClass(), _counter(0){}
    void method1() { _counter++; }
    int NumCallsToMethod1() const { return _counter; }
};

TEST(testMethod2)
{
    bClass testThis;
    testThis.method2();
    TEST_EQUALS(1,testThis.NumCallsToMethod1());
}

或者,如果method1const

class bClass : public aClass
{
    mutable int _counter;
public:
    bClass() : aClass(), _counter(0){}
    void method1() const { _counter++; }
    int NumCallsToMethod1() const { return _counter; }
};
于 2014-02-25T11:09:37.920 回答