使用Moq和TDD,从哪里开始?

我有一个服务器应用程序,我想知道如果我想开始实现TDD和使用Moq我应该从哪里开始。

我能读到哪些关于这个主题的好书,哪些不太“面向网络”?

我对此事有疑问,例如:

我应该模拟我想要测试的每个对象,还是只有那些我无法实现的对象,比如文本编写者?

我的服务器需要进行大量的设置才能真正做我想测试的事情,我应该把它塞进[TestInitialize]函数吗?

如果我想测试更深入的function,我应该如何链接我的测试?

我推荐两本书:Kent Beck的“ 测试驱动开发实例” 。 这是一本关于TDD的优秀书籍,我特别喜欢这本书,因为他通过一个例子,这对于了解节奏和思考过程非常有用。 另一方面,嘲笑有点轻松。 为此,我将阅读Roy Osherove 的unit testing艺术 。 正如标题所暗示的那样,它并没有专注于TDD,而是关注如何编写好的unit testing; 他对嘲笑和存根有很好的报道。

关于你应该模拟的东西,模拟的想法是允许你将你正在测试的类/函数与其他环境隔离开来,这样你就可以针对你控制的虚假环境测试它的行为。 在那个框架中,你不应该嘲笑这个阶级,而应该依赖它。

一个简单的例子:如果你有一个使用Logger的类,测试该类“写入”到记录器会非常痛苦,并且可能涉及检查记录器是否已写入文本文件。 这在很多层面上都不是一个好主意 – 从你的class级不关心记录器如何完成其​​工作的事实开始。 在这种情况下,您将使用假的,模拟的Logger替换类中的Logger实例,然后您可以在适当的时间validation您的类是否正在调用Logger,而不必担心记录器的function。

关于服务器初始化:unit testing通常在内存中,不依赖于环境,因此如果您正在进行TDD,则可能不必这样做。 通常,unit testing中的太多(任何?)初始化代码是一个不好的标志。

这表明您正在寻找更多的验收测试/ BDD样式测试。 我推荐使用SpecFlow和WatiN在MSDN杂志上关于行为驱动开发的最新文章; 它解释了如何通过一起开发高级测试来以测试优先的方式开发,这些测试validation应用程序正在执行用户想要的操作(验收测试,您将运行实际的服务器和应用程序),以及它正在执行它通过使用一小段代码来完成开发人员的意图(unit testing)。

希望这有帮助,并且快乐测试!

您不要模拟要测试的对象。 如果你这样做,你就是在测试模拟,而不是你的对象! 您需要模拟正在测试的对象的依赖关系

我最喜欢的TDD书之一就是测试驱动开发示例 (Kent Beck)。 我也非常喜欢他做的4部分屏幕演员 。

第1集:入门测试(28分钟)

在本集中,我们对样本应用程序的第一个特征进行了第一次测试,并将其切片以提供更频繁的反馈。

第2集:孤立测试(23分钟)

在本集中,我们确保测试不会相互影响。 一旦测试被隔离,我们就会实施几项新的操作。

第3集:大特色(25分钟)

在本集中,我们采用了一个大型function并将其切片以提供更频繁的反馈。 最后,我们清理代码以删除重复并使代码更易于阅读。

第4集:完成(20分钟)

在本集中,我们完成了示例应用程序的function并准备供其他人使用。 在开发早期推迟的设计决策现在更加清晰。 该系列文章以所有剧集的课程摘要结束。

如果您希望遵循TDD模式,您的代码应该通过开发测试来发展。 你会选择单一的责任,并且正如你所测试的类所提到的mock / stub所有依赖关系。 这样,您可以在任何依赖项上设置虚拟数据和预期行为,而不必再担心它们。

这里有一个简短的介绍: http : //www.agiledata.org/essays/tdd.html很遗憾,我没有任何特定的书籍,我可以根据个人经验推荐。

阅读本文对于帮助您入门也很有用: http : //stephenwalther.com/blog/archive/2008/06/12/tdd-introduction-to-moq.aspx