将Nunit测试添加到现有解决方案的公认惯例是什么?

时间:2009-10-23 10:12:27

标签: .net asp.net visual-studio testing nunit

我继承了一个没有自动化测试的合理规模的ASP.net解决方案。该解决方案似乎包含一个解决方案中的所有源/页面,没有名称间距,也没有层的分离,因此在代码后面有直接的SQL调用等等。

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

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

我真的在寻找两种方法的优点和缺点,或者确实是另一种方法。人们在实现这一目标的最佳方式经验是什么。

4 个答案:

答案 0 :(得分:3)

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

一旦你有了这个,你可以开始将代码移动到层中的过程,知道你没有破坏网站。这是引入单元测试的好时机。

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

答案 1 :(得分:2)

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

优点:

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

    1. 如果移动测试中的代码,则应创建并行命名空间层次结构。像resharper这样的工具使这更容易。
    2. 当有很多项目时,Visual Studio会慢一点。对于少数项目来说不是问题。

答案 2 :(得分:1)

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

通过Michael Feathers查看有效使用遗留代码,他有很多关于在未经测试的代码中引入单元测试的技巧。

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

不要害怕在初始阶段使代码变得“更糟”以启用单元测试(例如将方法或字段设置为公共的,应该是私有的或使所有内容都是虚拟的),只要您在代码中使代码更好测试已经到位。

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

答案 3 :(得分:0)

我还建议阅读Michael Feathers的“有效使用遗留代码”。

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

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