整个系统的单元测试应该多久运行一次?

ger*_*wry 9 tdd nunit unit-testing mstest xunit.net

一般来说,我仍然是一个测试新手的单位.

顺便说一句,你还可以看到其他论坛,如xUnit.net,等等这个问题,
因为它是我的一个重要问题.我提前为我的
交叉发布道歉; 你的意见对我来说非常重要,并不是
这个论坛的每个人都属于其他论坛.

我一直在寻找一个大的十年历史的遗留系统已超过700个单元测试有
最近写(700只是一个小小的开始).测试恰好用
MSTest 编写,但这个问题适用于所有测试框架AFAIK.

当我跑步时,通过vs2008"ALL TESTS",最后的计数只有七次测试.
这大约是迄今为止所写测试总数的1%.

更多信息:CodeMlex上提供了ASP.NET MVC 2 RTM源代码,包括其单元测试
; 这些单元测试也是用MSTest编写的,
尽管(一个不相关的事实)Brad Wilson后来加入了ASP.NET MVC团队
作为其高级程序员.所有2000多个测试都会运行,而不仅仅是少数.

问题:鉴于AFAIK单元测试的目的是识别
SUT中的破损,我是否认为"最佳实践"总是,
或者至少非常频繁地运行所有测试?

更新时间2010-05-22

首先,感谢所有提供优秀答案的人.您的答案证实了我的一般结论,即无论是否正在练习TDD(之前的测试)或经典的单元测试(测试之后),在每次本地重建之后运行所有单元测试都是最佳实践.

imho,这个问题有不止一个最好的答案,但是AFAIK SO让我只选择一个,所以为了公平起见,我给了Pete Johns一个复选标记,因为他是第一个并获得了最多的选票. SO社区.芬兰的Esko Luontola也给出了一个很好的答案(我希望他不会被埋在火山灰中)和两个非常好的联系,值得你花时间imho; 肯定与FIRST的链接对我来说是鼓舞人心的; AFAIK,.NET世界中只有xUnit.net提供"任何订单,随时".Esko的第二个链接是一个真正出色的92分钟视频"集成测试是一个骗局"由JB(Joe)Rainsberger(http://jbrains.ca提供,其中有更多内容值得我花时间).顺便说一句,Esko的博客也值得访问http:// orfjackal.

Joh*_*web 14

既然你已经标记了这个问题,"TDD",所有的单元测试的开发应执行模块(而过,扎最新的一个,直到你把它传递)每编译.其他模块中的单元测试不应该因当前模块中的开发而中断,否则它们测试过多.

还应该有一个持续集成循环,以确保所有测试都在每次签入源控制系统时运行.这将尽早陷入破坏.

至少,应该每晚进行一次夜间构建,每次测试和任何破坏都应该在早上的第一件事情中得到解决.容忍没有单元测试失败!

  • +1用于运行正在开发的模块的所有测试.我会提到TDD从业者的口头禅:RED-GREEN-REFACTOR.红色是一个失败的测试.Green开始编写使测试通过所需的最少代码,并*还*确保您没有破坏任何其他测试.为了确保这一点,您必须为正在开发的模块运行所有测试.在这种模式中,在编写完成测试的最少量代码之后,您始终会运行所有测试(针对正在开发的模块).要实现这一目标,所有测试必须在5-10秒内完成,正如@Esko Luontola所说. (3认同)

Esk*_*ola 7

应该可以快速运行单元测试,以便您可以在每次简单更改后运行它们.正如在http://agileinaflash.blogspot.com/2009/02/first.html上所说的那样

测试必须快速.如果您在简单的单线程更改后犹豫不决,那么您的测试速度太慢了.使测试速度如此之快,您不必考虑它们.[...]一个软件项目最终将有成千上万的单元测试,团队成员需要每分钟左右运行它们而不会有罪.你做数学.

就个人而言,我的疼痛阈值大约是5-10秒; 如果编译和运行所有单元测试需要的时间比这要长,那么它会严重惹恼并减慢我的速度.

如果存在缓慢的集成测试(应该避免),则可以在每次签入时运行它们.优选地由开发者在他签入之前然后再次在持续集成服务器上.