23

在 .NET(或任何其他语言或平台)中命名测试程序集的最佳约定是什么?

我主要分为这些选项(请提供其他选项!):

  • Company.Website -项目
  • 公司.网站.测试

或者

  • 公司网站
  • Company.WebsiteTests

第一个解决方案的问题在于它看起来像 .Tests 是站点的子命名空间,而在我看来它们确实更平行。当一个新的子命名空间发挥作用时会发生什么,比如Company.Website.Controls,例如,我应该将对该命名空间的测试放在哪里?

也许它甚至应该是:Tests.Company.WebsiteTests.Company.Website.Controls等等。

4

10 回答 10

28

我会和

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

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

如果您想在解决方案中拆分代码并进行测试,无论如何您都可以选择。例如,您可以设置解决方案

-代码文件夹

  • 公司网站

-测试文件夹

  • 公司.网站.测试
于 2008-09-17T16:21:29.857 回答
13

我个人会去

公司.测试.网站

这样你就有了一个公共的测试命名空间和里面的项目,遵循与实际项目相同的结构。

于 2008-09-17T15:51:13.440 回答
7

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

测试公司网站

当您有新的子命名空间时,它可以很好地消除歧义。

于 2008-09-17T15:52:34.717 回答
5

我非常喜欢这样构建测试命名空间:

Company.Tests.Website.xxx

Company.Tests.Website.Controls

像您一样,我将测试视为与主代码并行的命名空间结构,这为您提供了这一点。它还有一个优点是,由于命名空间仍然以您的公司名称开头,因此您不应该与 3rd 方库发生任何命名冲突

于 2008-09-17T15:53:53.510 回答
1

我们遵循嵌入式方法:

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

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

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

一开始似乎有点奇怪,但从长远来看,它对我们来说确实很好。

于 2008-09-17T15:59:30.550 回答
1

我也更喜欢在程序集的实际名称前加上“测试”,以便在我批量选择它们以拉入 NUUnit 或您正在使用的任何测试工具时,很容易看到按字母顺序列出的所有单元测试程序集。

因此,如果网站是我的解决方案(和程序集)的名称,我建议 -

Tests.Website.dll与实际代码组装Website.Dll一起使用

于 2008-09-17T16:41:42.570 回答
0

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

于 2008-09-17T15:52:34.997 回答
0

我更喜欢去:

公司.网站.测试

我不关心像 Company.Website.Controls 这样的子命名空间,所有测试都进入同一个命名空间:Company.Website.Tests。您不希望您的测试命名空间必须与其余代码并行,因为它只会使重构命名空间花费两倍的时间。

于 2008-09-17T15:56:48.870 回答
0

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

于 2008-09-17T15:59:03.530 回答
0

随着 MVC 开始在 .net Web 开发世界中成为现实,我将开始沿着这些思路思考。请记住,M、V 和 C 是不同的组件,因此:

  • 公司.命名空间.网站
  • 公司.命名空间.网站.核心
  • Company.Namspance.Website.Core.Tests
  • 公司.命名空间.网站.模型
  • Company.Namespace.Website.Model.Tests

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

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

于 2008-09-18T05:03:40.087 回答