我已经开始了漫长而艰巨的学习之旅,我的工作流程中有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>()这样的库,它可以接受任何接口,并在飞翔上为你构建一个模拟对象.

.net相关问答推荐

节省用户在整个应用程序中使用的Flutter

向从 .NET 序列化的对象添加 Xml 属性

如何规范机器之间连字符的排序顺序?

在 Git for Visual Studio 2012 中恢复到以前的提交

比较 C# 中的双精度值

在 web api 控制器(.net 核心)中使用 async/await 或任务

使用 .NET 在 Windows 中创建弹出式 toastr 通知

C# 时间跨度毫秒与 TotalMilliseconds

将笔画应用于 WPF 中的文本块

extern 在 C# 中是如何工作的?

是否有用于 Windows / C# 开发的可嵌入 Webkit 组件?

将双精度转换为带有 N 个小数的字符串,点作为小数分隔符,并且没有千位分隔符

将接收到的对象转换为 List 或 IEnumerable

关闭 Visual Studio 中所有选项卡但当前选项卡的键盘快捷键?

如何在 C# 中安全地将 System.Object 转换为bool?

如何在 C# 中将 null 值设置为 int?

mscorlib 代表什么?

获取磁盘上文件的大小

如何在安装后立即启动 .NET Windows 服务?

为什么 Roslyn 中有异步状态机类(而不是 struct )?