2009-10-23 59 views
1

我继承了一个合理大小的ASP.net解决方案,没有自动化测试。该解决方案似乎将一个解决方案中的所有源/页面包含在一个解决方案中,没有名称间隔,也没有分层,所以在代码中存在直接的SQL调用,位于文件后面等。将Nunit测试添加到现有解决方案中的做法是什么?

在对此站点进行更改之前,添加一些单元测试,最好使用nunit,因为我熟悉Xunit模型,给我一些信心,我没有破坏任何东西。我没有太多.net的经验,特别是我不确定何时使用项目vs解决方案等,尽管我对C#的基本语法等感到满意。

将单元测试添加到解决方案的建议方法是什么?我应该为测试创建一个独立的解决方案/项目,然后添加对现有解决方案适当元素的引用,还是应该在现有解决方案中创建一个单独的项目来容纳测试套件。

我真的在寻找两种方法的优点和缺点,或者完全是另一种方法。什么是人们获得最佳方式的经验。

回答

3

我不确定你可以从单元测试开始。记住第一条规则是“不要破坏什么”,我建议从使用WatiN或Selenium等东西进行一些集成或回归测试开始。这两个框架都可以从单元测试框架(如NUnit)运行集成测试。 Telerik做了一个,但它不是免费的,我没有使用它。

一旦你有了这些,你就可以开始把代码转换成图层的过程,知道你没有打破网站。这是引入单元测试的好时机。

这我会做一个项目,其中包含所有的单元测试,引用包含您正在测试的类的项目。我认为将层级分解为项目也是一种很好的做法。

2

我更喜欢同一个解决方案中的一个新项目。

优点:

  1. 您的测试总是编译在同一时间下测试的代码。
  2. 您的测试代码位于单独的程序集中,因此您始终在测试公共接口。
  3. 由于您的测试与测试中的代码不在同一个项目中,因此您不必在应用程序中部署测试。

缺点:

  1. 您创建一个命名空间的平行层次结构,如果你在测试移动代码身边,你应该保持。像resharper这样的工具使这更容易。
  2. 当有很多项目时,Visual Studio有点慢。对于较少数量的项目来说不是问题。
1

我会将测试放置在同一个解决方案中的不同项目中,因此它们将不会与生产版本一起分发。

调查Michael Feathers与遗留代码有效地工作,他有大量关于在未经测试的代码中引入单元测试的技巧。

有一些重构使单元测试更容易,并且不会更改程序逻辑(例如Visual Studio中内置的那些),您可以在初始阶段使用这些重构来改进程序结构。

不要害怕在初始阶段让代码“变得更糟”,以便启用单元测试(如制作应该是私有的方法或字段,或使所有内容都变为虚拟),只要您在代码更好的情况下你的测试已经到位。

这包括在生产代码中临时添加测试:第一项业务是测试代码,您可以稍后移动测试。

0

我还建议阅读Michael Feathers用Legacy Code有效地工作。

至于解决方案结构使用遗留代码时,我通常会复制现有的解决方案文件,将其称为<> Test.Sln,并将新的UnitTests项目添加到新创建的解决方案文件中。

我为Integration测试添加了另一个测试项目,因为我喜欢将单元测试与集成测试分开。

相关问题