单元测试应该在.Net解决方案中的自己的项目中

时间:2010-02-12 10:04:54

标签: .net unit-testing project-structure

我应该为单元测试启动一个新项目吗?这意味着我会得到两个可执行文件正确吗?然后我担心命名空间组织。我是否可以将单元测试放在与他们正在测试的类相同的名称空间中,尽管它们是不同项目的一部分?

这提出了另一个问题。我知道命名空间命名约定是CompanyName.TechnologyName.Feautre.Design。如何在我的解决方案/项目布局中实现这一目标?解决方案名称=公司名称,项目名称=技术名称?

如果是这种情况,那就意味着我无法将我的单元测试分成新项目。

5 个答案:

答案 0 :(得分:34)

最好的方法是为每个“生产项目”建立一个单独的单元测试项目。这可以确保您可以成对变化并移动它们。

如果您有一个单元测试项目涉及多个目标项目,这将在这两个项目之间创建一个人工紧耦合,因为如果没有全部项目,您将无法编译单元测试项目它的目标项目。这再次使得单独测试单个项目变得非常困难 - 这就是单元测试的全部内容。

将单元测试保存在单独的库中非常重要,因为这样可以确保只测试代码的公共API (黑盒测试)。

我通过在目标名称空间后附加“UnitTest”命名我的名称空间。

答案 1 :(得分:8)

我倾向于有一个特定的测试项目/程序集 per 程序集。测试程序集将与它应该测试的程序集具有相同的名称,并在名称和名称空间中添加.Test

这样,您就可以将测试隔离开来,并且不会使用生产代码进行部署。

答案 2 :(得分:5)

每个解决方案的

1个测试项目,其中包含folders =>回归/集成/单元,其子文件夹“镜像”您的解决方案项目/文件夹架构。

记住 - 测试不是您的生产代码。它们应该分开。

答案 3 :(得分:2)

是。您的单元测试应该是一个单独的项目,它将编译为自己的DLL。

这意味着您不会将测试代码与项目一起部署 - 并且它鼓励良好的设计(因为您的测试无法看到私有/内部属性,您自然倾向于测试与项目交互的项目的那些部分其他系统,而不是专注于测试其内部实现的每个细节)

就命名而言,我们通常为每个项目选择一个“代号” - 当前的一个名为Zanzibar - 然后最终得到如下项目:

MyCompany.Zanzibar.Website (ASP.NET MVC Web应用程序)

MyCompany.Zanzibar.Website.Testing (包含MVC网络应用的单元测试)

答案 4 :(得分:1)

是。为每个解决方案项目创建一个单元测试项目。

只有一个可执行文件。单元测试保存在DLL中。

为什么不将'UnitTests'附加到相关的命名空间。