模拟对象c ++

时间:2014-02-14 18:06:29

标签: c++ testing mocking tdd

我正在阅读有关TDD的内容,并想知道是否可以编写任何模拟对象而无需使用像easyMock这样的额外测试库。或者像这样。

例如我有代码:

class Person
{
  int age;
  int add ( int x) { return this.age + x }
}

如何编写模拟对象来测试上面的代码?

2 个答案:

答案 0 :(得分:2)

你不要通过模拟那个类来测试这样的类。你测试接口。实际上,您的代码看起来可能是一个模拟对象来测试其他代码。

// defined in code that is being tested
class Person {
    virtual int add(int) = 0;
}
void foo(const Person& bar) {
    // use person somehow
}

要测试上述界面,可以创建模拟对象。此对象没有实际实现可能具有的要求。例如,虽然实际实现可能需要数据库连接,但模拟对象却不需要。

class Mock: public Person {
    int add(int x) {
        // do something less complex than real implementation would
        return x;
    }
}

Mock test;
foo(test);

如果要测试say,模板函数,则无需使用继承。

template<class T>
void foo(T bar) {
    // Code that uses T.add()
}

要像这样测试界面,你可以像这样定义模拟对象

class Mock {
    int add(int x) {
        // do something less complex than real implementation would
        return x;
    }
}

答案 1 :(得分:0)

当您的代码中使用了外部资源(例如数据库,文件等)时,模拟很有用。为此,您将以这样的方式实现这些接口,即“伪造”所需的步骤,以便可以测试您实际测试的代码(您的业务逻辑),而不必担心由于的假阴性测试外部资源的情况。

您发布的代码不需要模拟来测试它。