我是单元测试的新手,但我开始认为我需要它。我有一个ASP.NET Web表单应用程序,它正在无法预料的方向上进行扩展,这意味着某些代码可以用于多种用途。我需要尝试确保在更换这些单元时我不会破坏其原始用途。那么我如何才能最好地将单元测试追溯到现有代码呢?实用建议表示赞赏感谢
答案 0 :(得分:4)
很慢!
我目前正在对我的项目做同样的事情并且需要付出很多努力。为了对现有类进行单元测试,它们通常需要完全重新设计......并且由于高度耦合,更改单个类可能会导致需要在其他几十个类中进行更改。
最终结果是良好的干净代码可以工作,可以扩展,并且可以验证....但它确实需要花费大量的时间和精力。
我自己买了几本关于单元测试的书,帮助我完成整个过程。
您可能需要考虑让自己xUnit Test Patterns和Working Effectively with Legacy Code。
答案 1 :(得分:3)
在你为它所使用的方法编写测试之前,不要改变一行代码。我看到人们犯的最大错误是他们重新设计了类,使它在编写测试之前更加可测试。这会适得其反,因为你会破坏某些东西。
正确的方法是在更改之前为类(或方法,粒度级别由您决定)编写一整套测试。这些测试是您的安全网,可让您自信地进行更改。如果你发现你不能为一个类编写测试,也许是因为它与另一个类的耦合太多,那么你的第一组测试应该是两个类一起进行的,那么你的下一步应该是将这些类去掉。 / p>
答案 2 :(得分:1)
单元测试的一个未说明的好处是它将类设计推向更低耦合的方式。如果你尝试在最后添加UnitTesting,你应该准备好:
特别需要注意的几件事情是:
修改
维基百科解释Unit Testing:
单元测试的目标是隔离程序的每个部分并显示各个部分是正确的。单元测试提供了严格的书面合同,代码必须满足。
这是关于测试方法的。这不是测试方法和数据库。您可以执行测试方法和数据库的自动化测试,但这些测试不是单元测试。
答案 3 :(得分:0)
刚刚完成此操作后,我建议您一次添加一个单元测试并以相同的速度修复它们。
答案 4 :(得分:0)
我遇到了同样的问题。
我们决定这样做,一次只需要一个特定的功能。编写测试并解耦现有代码。新代码将取代现有的耦合代码。所以基本上我们正在做的是逐位重写应用程序。
确保使个别重写尽可能小,以减少对现有代码的影响。
确保您了解代码是什么以及应该做什么,这指向了要求。在一天结束时,特别是如果你正沿着TDD路线走下去。您的单元测试是您的要求。因此,如果您不了解原始要求,则不会为您的代码编写正确的测试。
正如大家所建议的那样,首先编写测试然后编写代码(TDD)。一旦所有测试都通过,然后用完全测试的代码替换应用程序中的旧耦合代码。