如何模拟这个类

时间:2015-07-29 14:05:09

标签: c++ unit-testing mocking

class A
{
public:
    void doFirstJob() 
    {
        // Do first Job.
    }
}

class B : public A
{
public:
    virtual void doSecondJob()
    {
        // Do Second Job.
    }
}

class C
{
public:
    void doSomething() {
        b->doFirstJob();
        b->doSecondJob();
    }
private:
    B* b;
}

现在我应该为C类编写单元测试代码,然后我会为B类编写一个模拟,但问题是如何模拟方法 doFirstJob()。

直言,我想知道如何模拟父类的非虚方法???

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

Typemock Isolator++支持模拟父类的非虚方法(与伪造被测试类的方法相同)。

参见以下示例:

class A
{
public:
    int doFirstJob() 
    {
        return 0;
    }
};

class B : public A
{

};

class C
{
public:

    int doSomething() 
    {
        return b->doFirstJob();
    }
    void setB(B* to)
    {
        b = to;
    }
private:
    B* b;
};

在测试中你创建了假的B - >更改doFirstJob的行为以返回3 - >像往常一样继续你的测试。

TEST_CLASS(NonVirtualMethod)
{
public:

    TEST_METHOD(NonVirtualMethodTestOfBaseClass)
    {
        B* fakeB = FAKE<B>(); 
        WHEN_CALLED(fakeB->doFirstJob()).Return(3);

        C c;
        c.setB(fakeB);
        int first = c.doSomething();

        Assert::AreEqual(3,first);
    }
}

您可以找到更多示例here