.NET测试命名规范

25
在.NET(或任何其他语言或平台)中,命名测试组件的最佳约定是什么?
我主要分为以下选项(请提供其他选项!):
- Company.Website - 项目 - Company.Website.Tests
或者
- Company.Website - Company.WebsiteTests
第一种解决方案的问题在于它看起来像.Tests是站点的子命名空间,而实际上在我的想法中更平行。如果出现新的子命名空间(例如Company.Website.Controls),那么该命名空间的测试应该放在哪里?
也许甚至应该是:Tests.Company.Website和Tests.Company.Website.Controls等。

3
为什么这个被关闭了?所有“基于观点”的回答仍然是一个回答,用户可以查看选项列表并选择他们认为最好的选项。 - Shawn Mclean
10个回答

32

我会跟着去。

* Company.Website - the project
* Company.Website.Tests

简短的原因和答案很简单,测试和项目在代码中是相关联的,因此它们应该共享命名空间。

如果你想要在解决方案中将代码和测试分开,你仍然有这个选项。例如,你可以设置一个解决方案:

- Code文件夹

  • Company.Website

-Tests文件夹

  • Company.Website.Tests

6
您不需要以这种方式添加Company.Website命名空间的使用。 - justin.m.chase

13

我个人会选择

Company.Tests.Website

这样您将拥有一个通用的测试命名空间和其中的项目,遵循与实际项目相同的结构。


7

我实际上有一个备用的并行根目录。

Tests.Company.Website

当你有新的子命名空间时,它非常适用于消除歧义。


4
为什么会有人给踩呢?能否请评论者详细说明一下原因?这个提议跟其他建议一样好,而且还有很好的观点。 - F.D.Castel
1
这确实会导致引用命名空间的问题。有时候会让人感到头疼,所以我在搜索SO上建议的解决方法..(我没有投票否决) - Piotr Kula

5

我非常喜欢按照以下方式组织测试命名空间:

Company.Tests.Website.xxx

Company.Tests.Website.Controls

和你一样,我认为测试是主代码的平行命名空间结构,这样可以提供这种功能。此外,它还具有一个优点,即由于命名空间仍以公司名称开头,因此您不应该与第三方库发生命名冲突。


2

我们采用嵌入式方法:

Company.Namespace.Test
Company.Namespace.Data.Test

这样测试就可以接近被测试的代码,而不必在项目之间来回切换或查找引用以确保有一个测试覆盖了特定的方法。我们也不必维护两个分离但相同的层次结构。

随着我们的增强和开发,我们还可以测试代码的不同部分。

一开始可能有点奇怪,但从长远来看,它对我们非常有效。


1

我也喜欢在程序集的实际名称前加上“Tests”前缀,这样当我批量选择它们并将其拉入NUNit或任何测试工具时,很容易看到我所有单元测试程序集以字母顺序列在一起。

所以如果“网站”是我的解决方案(及其程序集)的名称,我建议使用Tests.Website.dll来配合实际的代码程序集Website.Dll


0

我通常在解决方案资源管理器中将测试项目命名为Project-Tests,以简洁明了。对于命名空间,我使用Company.Namespace.Tests


0

我更倾向于选择:

Company.Website.Tests

我不关心任何子命名空间,比如Company.Website.Controls,所有的测试都放在同一个命名空间中:Company.Website.Tests。你不希望你的测试命名空间必须与其余代码并列,因为这会使重构命名空间的时间增加一倍。


0

我更喜欢使用 Company.Website.Spec,并且通常每个解决方案只有一个测试项目


0

随着MVC在.NET Web开发领域逐渐成为现实,我会开始朝这个方向思考。记住,M、V和C是独立的组件,所以:

  • Company.Namespace.Website
  • Company.Namespace.Website.Core
  • Company.Namspance.Website.Core.Tests
  • Company.Namespace.Website.Model
  • Company.Namespace.Website.Model.Tests

网站是您的轻量级视图。 核心包含控制器、助手、视图接口等。Core.Tests 是针对该核心的测试。 模型用于您的数据模型。这里的酷东西是,您的模型测试可以自动化您的数据库特定测试。

对于某些人来说,这可能有点过度,但我发现它可以让我相当容易地分离关注点。


1
开始变成现实 - Pablo Recalde

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接