在Visual Studio中组织单元测试

时间:2009-08-16 17:47:47

标签: visual-studio unit-testing mstest organization project-organization

我正在为项目中的每个程序集创建一个配对的单元测试程序集,两者都在同一个文件夹中。

  • MyProject的/ MyProject.csproj
  • MyProject.Test / MyProject.Test.csproj

看看开源项目,我看到一些较小的项目将所有测试放在一个程序集中,而其他项目则像我一样将它分开。我正在处理一个大型解决方案,因此将所有测试放在一个项目中会非常疯狂。

我目前有msbuild逻辑来对所有* .Test.csproj文件运行测试。如果我在不同的文件夹中进行了所有测试,我就不需要这样做了。

只是想知道是否有任何好的论据以某种方式做事。

由于

4 个答案:

答案 0 :(得分:4)

我以相同的方式执行但是我更改了每个测试项目的默认命名空间以匹配生产项目的命名空间。因此,类X.Y.Foo的测试位于X.Y.FooTest而非X.Y.Test.FooTest - 这意味着您需要更少的使用指令,并且通常会使事情变得更简单。

我想将两者放在不同项目中的主要原因是避免在生产库中包含测试或者必须运送未经测试的库。使用单独的项目结构,您可以针对您构建的任何内容运行单元测试。它还可以更容易地查看生产类,而无需查看两倍的文件(获得库的“感觉”)。

最后,请不要忘记,如果您在测试时需要访问internal成员,则总是[InternalsVisibleTo]

答案 1 :(得分:3)

我建议尽量减少单元测试项目。原因是你创建的每一个都至少增加了十秒的编译时间。在一个大项目中,它开始加起来。

这是我使用的目录结构:

PROJECTNAME /支链/中继/项目/代码/ codeproject1
PROJECTNAME /分支机构/树干/项目/代码/ codeproject2
PROJECTNAME /分支机构/树干/项目/代码/ codeproject3
PROJECTNAME /分支机构/树干/项目/测试/ testproject1
PROJECTNAME /支链/中继/依赖 PROJECTNAME /原型
PROJECTNAME /...

并在testproject1中,以下目录结构:

codeproject1 /
codeproject2 /
codeproject2 /网络
codeproject2 /网络/ MVC
codeproject3 /
codeproject3 / support

答案 2 :(得分:2)

我做同样的事情,除了每个项目都在同一根文件夹下的自己的文件夹中。 以下内容:

解决方案文件夹

  • ProjectA文件夹
  • ProjectA.Test文件夹
  • ProjectB文件夹
  • ProjectB.Test文件夹

答案 3 :(得分:1)

我总是为每个项目都有一个单独的测试项目。部分原因只是我喜欢它的组织,但我也经常遇到这样的情况:我决定将库拆分为自己的解决方案,以便其他解决方案可以重用它。在这些情况下,让库项目拥有自己独立的测试项目(而不是单个项目中的所有测试)可以更容易地打破这个库。