.Net测试类应该驻留在不同的项目中吗?

时间:2009-07-18 10:02:39

标签: .net unit-testing projects-and-solutions

Java中的约定是不同的 - 每个“模块”(相当于IntelliJ中的Java)都有一个src和test目录。因此,jUnit可以按项目运行,而且不需要单独的测试项目。

5 个答案:

答案 0 :(得分:8)

是的,您绝不希望生产程序集包含测试代码(因为它不是产品的一部分,而是围绕它的开发框架的一部分)。

答案 1 :(得分:4)

正如您可能已经提到的那样,通常的.NET约定是将测试代码放在一个单独的程序集中(一般来说,在Visual Studio中,每个Project都会生成一个不同的程序集)。

为什么会这样?

  • 提供部署选择
    许多人(包括我)认为你不应该将测试部署到生产中。
  • 限制测试访问权限
    有助于确保测试对所测试代码的公共接口起作用,这增加了使您的API设计正确的需求(尽管有时这是一个限制 - 例如,请参阅Question 261177。)
  • 帮助保持每项测试的小型化
    我曾经把我的测试推到同一个项目中,但发现重复使用太多代码的诱惑,导致单元测试做得太多,而且太脆弱了。

对于它的价值,我将测试保存在单独的项目中,但在同一解决方案中,必要时使用[InternalsVisibleTo]属性。我将每个测试命名为.Tests.dll,然后在NAnt脚本中使用通配符来查找要运行的所有测试。

答案 2 :(得分:2)

是的 - 测试课应该进入他们自己的测试项目。

答案 3 :(得分:0)

是的 - 您正在测试外部参考。你可以采用相同的解决方案,尽管一些纯粹主义者认为这只是一种捷径。

答案 4 :(得分:0)

注意:在Java中将测试保存在同一个包中的部分原因是因为您的测试具有驻留在同一个包中以测试包可见方法。 InternalsVisibleTo在.Net中绕过了这个限制。