在.NET中存储单元测试的常用方法

时间:2013-01-26 03:06:56

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

  

可能重复:
  Which is better? Unit-test project per solution or per project?

我不时会看到不同的方法:

某人在同一个项目中存储unittest,他们目前正在测试,只是在项目根目录下创建测试文件夹。

有人为他们测试的解决方案为每个项目创建了额外的测试项目。

有人对整个解决方案中的所有测试都有一个大的测试项目。

那么什么是通用的,比方说,在.NET世界中存储测试的“官方”方式?非常确定微软有这方面的指导。

3 个答案:

答案 0 :(得分:2)

测试代码的第一条规则: 永远不要将测试代码放在生产装配中(可交付成果)。

此规则的原因很简单:测试代码可能会破坏您的现场安装。即使有良好的编码实践。即使有优秀的程序员。

测试代码的第二条规则: 它必须由程序员自己维护:当开发人员重构他们的代码时,测试代码必须随之改变。 因此,如果您能以任何方式避免它,请不要将其放在单独的解决方案中。

从这里开始,你就是靠自己。就个人而言,我更喜欢在我的生产组件和我的测试组件之间保持1比1的对应关系,并在名称后添加“.Test”。

然后,当我对生产程序集的csproj文件进行单元测试时,我使用这个命名来过滤它们。

哦,我提到你不应该把测试代码放在生产装配中吗?

答案 1 :(得分:1)

这个问题似乎有点主观,因此您可能会获得大量答案,最终由您自己决定什么最适合您和您的团队。

我的$ .02 ......

我通常希望在与正在测试的代码不同的项目中看到测试。这可以防止生成的程序集变得臃肿,并避免必须将测试代码部署到生产环境中(或根据其目的分发给客户端)。

关于测试是否应该在同一个项目中,或者分布在多个项目中取决于正在编写的测试。如果测试都是相关的,并且将它们捆绑在一起是有意义的,那么将它们放在一个项目中,但如果它们非常不相关,那么我认为没有理由将它们放在同一个项目中。

我猜这个判断可以应用于与任何代码相同的测试。如果它在一起,把它放在一起,如果没有,那就不要。

你正在编写测试的事实意味着你可能正走在正确的道路上,所以不要害怕尝试一段时间,确定它是否适合你,如果没有,请尝试不同的方式。编写代码的美妙之处在于它可以随着时间的推移进行重构,以更好地满足您的需求。 :)

答案 2 :(得分:0)

这就是我所看到的

a)大型团队由专门的QA团队独立管理测试代码,因此使用自己的解决方案更容易管理测试代码。

b)由于不是那么大的团队开发单元测试和一些功能测试,因此作为同一解决方案的一部分管理测试变得更容易。

c)今天,随着TDD被更积极地采用,简单地将测试作为产品代码项目的部分

本身变得更容易。

指南是将测试放在最适合管理它们的地方,对于大多数人来说,它通常是a或b。

UT:http://msdn.microsoft.com/en-us/library/hh598957.aspx

TDD:http://msdn.microsoft.com/en-us/library/aa730844(v=vs.80).aspx