我继承了一个没有自动化测试的合理规模的ASP.net解决方案。该解决方案似乎包含一个解决方案中的所有源/页面,没有名称间距,也没有层的分离,因此在代码后面有直接的SQL调用等等。
在对这个网站进行更改之前,我想添加一些单元测试,最好使用nunit,因为我熟悉Xunit模型,让我有信心,我没有破坏任何东西。我没有太多的.net经验,特别是我不确定何时使用项目与解决方案等,虽然我对C#的基本语法等感到满意。
向解决方案添加单元测试的推荐方法是什么?我应该为测试创建单独的解决方案/项目,然后添加对现有解决方案的适当元素的引用,或者我应该在现有解决方案中创建一个单独的项目来容纳测试套件。
我真的在寻找两种方法的优点和缺点,或者确实是另一种方法。人们在实现这一目标的最佳方式经验是什么。
答案 0 :(得分:3)
我不确定你可以从单元测试开始。记住第一条规则是“不要破坏它的作用”,我建议从使用WatiN或Selenium之类的东西开始进行一些集成或回归测试。这两个框架都可以运行来自单元测试框架(如NUnit)的集成测试。 Telerik也做了一个,但它不是免费的,我没有使用它。
一旦你有了这个,你可以开始将代码移动到层中的过程,知道你没有破坏网站。这是引入单元测试的好时机。
这样做我会做一个包含所有单元测试的项目,并引用包含您正在测试的类的项目。我认为将您的层级分成项目也是一种很好的做法。
答案 1 :(得分:2)
我更喜欢同一解决方案中的新项目。
优点:
缺点:
答案 2 :(得分:1)
我将测试放在同一个解决方案中的另一个项目中,因此它们不会与生产版本一起分发。
通过Michael Feathers查看有效使用遗留代码,他有很多关于在未经测试的代码中引入单元测试的技巧。
有重构使单元测试更容易,并且不会更改程序逻辑(例如Visual Studio中内置的程序逻辑),您可以在初始阶段使用这些重构来改进程序结构。
不要害怕在初始阶段使代码变得“更糟”以启用单元测试(例如将方法或字段设置为公共的,应该是私有的或使所有内容都是虚拟的),只要您在代码中使代码更好测试已经到位。
这包括在生产代码本身中临时添加测试:第一项业务是测试代码,您可以稍后移动测试。
答案 3 :(得分:0)
我还建议阅读Michael Feathers的“有效使用遗留代码”。
对于使用旧代码时的解决方案结构,我通常会复制现有的解决方案文件,称为<> Test.Sln,并将新的UnitTests项目添加到新创建的解决方案文件中。
我为Integration测试添加了另一个测试项目,因为我喜欢将单元测试与集成测试分开。