20

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

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

如果是这种情况,这是否意味着我不能将我的单元测试分离到一个新项目中。

4

5 回答 5

36

最好的方法是为每个“生产项目”设置一个单独的单元测试项目。这样可以确保您可以成对改变和移动它们。

如果您有一个单元测试项目覆盖多个目标项目,这会在这两个项目之间造成人为的紧密耦合,因为您将无法在没有所有目标项目的情况下编译单元测试项目。这再次使得单独测试单个项目变得非常困难——这就是单元测试的全部内容。

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

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

于 2010-02-12T10:10:21.760 回答
8

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

这样,您就可以隔离测试,并且不会将它们与您的生产代码一起部署。

于 2010-02-12T10:14:50.093 回答
5

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

记住——测试不是你的生产代码。他们应该分开。

于 2010-02-12T10:07:56.160 回答
2

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

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

在命名方面,我们通常为每个项目选择一个“代号”——目前的项目名为 Zanzibar——然后最终得到如下项目:

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

MyCompany.Zanzibar.Website.Testing(包含 MVC Web 应用程序的单元测试)

于 2010-02-12T10:15:12.963 回答
1

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

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

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

于 2010-02-12T10:06:51.670 回答