【问题标题】:How to mock this class如何模拟这个类
【发布时间】:2015-07-29 14:05:09
【问题描述】:
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类编写一个mock,但问题是如何mock方法doFirstJob()。

说白了就是想知道如何mock父类的非虚方法???

谁能帮帮我??

【问题讨论】:

  • 如果类没有被任何东西继承,为什么 doSecondJob 是虚拟的?
  • 通常会实现一个模拟类,然后运行单元测试将最后一个类连接到“真实”类。

标签: c++ unit-testing mocking


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    相关资源
    最近更新 更多