.net中的测试驱动开发和单元测试

时间:2011-07-21 02:48:17

标签: c# .net unit-testing testing tdd

好的,所以我是一名新鲜的.net开发人员,我在大学做了一些,但是从大学毕业做Coldfusion工作,现在已经切换到MVC3中的一个新项目,使用TDD,EF,整个九码。

我试图用TDD解决一个问题。

首先,据我所知,TDD更像是一种“设计实践”,而不仅仅是在代码之前编写单元测试的实际方式?

大多数情况下,我对单元测试和TDD如何共存感到困惑。

我的TDD测试实际上是单元测试,还是我的TDD测试只是一种帮助我设计的方法,然后我仍然使用单元测试来覆盖代码?

有人有任何想法吗?

5 个答案:

答案 0 :(得分:3)

TDD测试通常(但不总是)单元测试。非单元测试的示例可以是使用WaitiN的UI测试。考虑TDD最简单的方法是将其视为一种规程,确保以编程方式表达尽可能多的要求(业务和技术要求),以便您可以始终如一地定期将它们应用到代码库中以确保您在进行更改时仍然符合要求。

在实践中,这往往会导致您的架构中出现不同(有些人认为更好)的模式,通常是解耦以允许模块单独进行测试。在更严格的TDD环境中,首先开发测试(以便它失败),然后开发代码以满足您的测试并不罕见。该学科确保您的测试充分表达您的要求的意图。

答案 1 :(得分:1)

从表面上看,TDD测试与单元测试非常相似。这并不奇怪,因为您使用单元测试框架(如Visual Studio Tests或NUnit)来创建两种类型的测试。但是TDD测试和单元测试之间存在差异。

与单元测试一样,TDD测试可用于回归测试。您可以使用TDD测试立即确定代码更改是否已破坏现有应用程序功能。但是,与单元测试不同,TDD测试不一定单独测试一个代码单元。

与验收测试一样,TDD测试用于驱动应用程序的创建。 TDD测试就像小型验收测试一样。您创建TDD测试以表示下一步需要实现的应用程序功能。但是,与验收测试不同,TDD测试不是端到端测试。 TDD测试不与实时数据库或Web服务器交互。

有关该文章,请参阅here

答案 2 :(得分:1)

TDD测试绝对可以进行单元测试。

根据维基百科的说法,它们肯定属于“单元测试”的定义:http://en.wikipedia.org/wiki/Unit_testing

答案 3 :(得分:0)

主要区别在于您是预先创建测试(表明您希望代码执行的操作)而不是之后(测试您已编码的内容)。因此从理论上讲,您的TDD测试应该已经涵盖了您编写的生产代码。纯TDD建议您不要编写一行新的生产代码,除非您有一个需要它的失败测试。根据经验,您可以决定您希望坚持这一原则的程度。

答案 4 :(得分:0)

单位测试艺术的作者Roy Osherove在这方面有一个不错的视频:

Understanding Test Driven Development