我已经开始了漫长而艰巨的学习之旅,我的工作流程中有apply个TDD.我的印象是TDD非常符合国际奥委会的原则.
在浏览了SO中的一些TDD标记问题后,我读到了针对接口而不是对象进行编程的好主意.
您能否提供简单的代码示例,说明这是什么,以及如何在实际用例中应用它?简单的例子是我(以及其他想要学习的人)掌握这些概念的关键.
我已经开始了漫长而艰巨的学习之旅,我的工作流程中有apply个TDD.我的印象是TDD非常符合国际奥委会的原则.
在浏览了SO中的一些TDD标记问题后,我读到了针对接口而不是对象进行编程的好主意.
您能否提供简单的代码示例,说明这是什么,以及如何在实际用例中应用它?简单的例子是我(以及其他想要学习的人)掌握这些概念的关键.
考虑:
class MyClass
{
//Implementation
public void Foo() {}
}
class SomethingYouWantToTest
{
public bool MyMethod(MyClass c)
{
//Code you want to test
c.Foo();
}
}
因为MyMethod
只接受MyClass
,如果为了单元测试而想用模拟对象替换MyClass
,就不能.最好使用接口:
interface IMyClass
{
void Foo();
}
class MyClass : IMyClass
{
//Implementation
public void Foo() {}
}
class SomethingYouWantToTest
{
public bool MyMethod(IMyClass c)
{
//Code you want to test
c.Foo();
}
}
现在您可以测试MyMethod
了,因为它只使用一个接口,而不是特定的具体实现.然后,您可以实现该接口来创建您想要用于测试目的的任何类型的模拟或伪装.甚至还有像Rhino MocksRhino.Mocks.MockRepository.StrictMock<T>()
这样的库,它可以接受任何接口,并在飞翔上为你构建一个模拟对象.