我正在阅读有关TDD的内容,并想知道是否可以编写任何模拟对象而无需使用像easyMock这样的额外测试库。或者像这样。
例如我有代码:
class Person
{
int age;
int add ( int x) { return this.age + x }
}
如何编写模拟对象来测试上面的代码?
答案 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)
当您的代码中使用了外部资源(例如数据库,文件等)时,模拟很有用。为此,您将以这样的方式实现这些接口,即“伪造”所需的步骤,以便可以测试您实际测试的代码(您的业务逻辑),而不必担心由于的假阴性测试外部资源的情况。
您发布的代码不需要模拟来测试它。