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()。
直言,我想知道如何模拟父类的非虚方法???
任何人都可以帮助我吗?
答案 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。