如何回顾性地为.NET应用程序创建单元测试?

时间:2009-01-01 14:19:40

标签: .net asp.net unit-testing

我是单元测试的新手,但我开始认为我需要它。我有一个ASP.NET Web表单应用程序,它正在无法预料的方向上进行扩展,这意味着某些代码可以用于多种用途。我需要尝试确保在更换这些单元时我不会破坏其原始用途。那么我如何才能最好地将单元测试追溯到现有代码呢?实用建议表示赞赏感谢

5 个答案:

答案 0 :(得分:4)

很慢!

我目前正在对我的项目做同样的事情并且需要付出很多努力。为了对现有类进行单元测试,它们通常需要完全重新设计......并且由于高度耦合,更改单个类可能会导致需要在其他几十个类中进行更改。

最终结果是良好的干净代码可以工作,可以扩展,并且可以验证....但它确实需要花费大量的时间和精力。

我自己买了几本关于单元测试的书,帮助我完成整个过程。

您可能需要考虑让自己xUnit Test PatternsWorking Effectively with Legacy Code

答案 1 :(得分:3)

在你为它所使用的方法编写测试之前,不要改变一行代码。我看到人们犯的最大错误是他们重新设计了类,使它在编写测试之前更加可测试。这会适得其反,因为你破坏某些东西。

正确的方法是在更改之前为类(或方法,粒度级别由您决定)编写一整套测试。这些测试是您的安全网,可让您自信地进行更改。如果你发现你不能为一个类编写测试,也许是因为它与另一个类的耦合太多,那么你的第一组测试应该是两个类一起进行的,那么你的下一步应该是将这些类去掉。 / p>

答案 2 :(得分:1)

单元测试的一个未说明的好处是它将类设计推向更低耦合的方式。如果你尝试在最后添加UnitTesting,你应该准备好:

  • 由于耦合而无法测试单位的情况
  • 重新设计类以删除耦合,当然,如果没有现有的单元测试,这样做是不安全的。

特别需要注意的几件事情是:

  • 新建其他类的类(通常是高耦合)。
  • 依赖于单元测试时不存在的基础结构的类,例如HttpRequest和数据库

修改

维基百科解释Unit Testing

  

单元测试的目标是隔离程序的每个部分并显示各个部分是正确的。单元测试提供了严格的书面合同,代码必须满足。

这是关于测试方法的。这不是测试方法和数据库。您可以执行测试方法和数据库的自动化测试,但这些测试不是单元测试。

答案 3 :(得分:0)

刚刚完成此操作后,我建议您一次添加一个单元测试并以相同的速度修复它们。

答案 4 :(得分:0)

我遇到了同样的问题。

我们决定这样做,一次只需要一个特定的功能。编写测试并解耦现有代码。新代码将取代现有的耦合代码。所以基本上我们正在做的是逐位重写应用程序。

确保使个别重写尽可能小,以减少对现有代码的影响。

确保您了解代码是什么以及应该做什么,这指向了要求。在一天结束时,特别是如果你正沿着TDD路线走下去。您的单元测试是您的要求。因此,如果您不了解原始要求,则不会为您的代码编写正确的测试。

正如大家所建议的那样,首先编写测试然后编写代码(TDD)。一旦所有测试都通过,然后用完全测试的代码替换应用程序中的旧耦合代码。