web-dev-qa-db-ja.com

並べ替えを改善するための.net C#ユニットテストプロジェクトの命名規則

私は現在、単体テストプロジェクトに次の命名規則を使用しています。プロジェクト「MyApp」がある場合は、それを使用します。

-- MyApp
-- MyApp.Tests

これはかなり一般的な習慣だと思います。

ここで問題は、別のプロジェクトMyApp.Commonがある場合です。ソリューションエクスプローラーで、プロジェクトが並べ替えられました

-- MyApp
-- MyApp.Common
-- MyApp.Common.Tests
-- MyApp.Tests

だから私のMyApp.Testsは、テストしているメインプロジェクトの「隣」ではなくなりました。プロジェクトが成長するにつれて、テストはあらゆる場所で混同される可能性があります。

私はそれが大きなことではないことを知っていますが、他の誰かがこれに遭遇して他の方法を考えているのではないかと思っていますか?

提案を事前に感謝します。

2
peterc

並べ替えの問題を一瞬忘れて、[ProjectName].Testsはより良い命名体系です。これは、テストが属するプロジェクトを明確に示し、サブドメインの命名の一般的な命名方法に従います。

ただし、ご指摘のとおり、特定のドメインとそのサブドメインの両方をテストする場合は、並べ替えの問題が少し発生します。

これまでのところ、ソリューションでプロジェクトフォルダーを使用するだけでこれを解決しました。

MyApp (sln)
  - Api (folder)
      - MyApp.Api (csproj)
      - MyApp.Api.Tests (csproj)
  - Business (folder)
      - MyApp.Business (csproj)
      - MyApp.Business.Tests (csproj)
  - Database (folder)
      - MyApp.Database (csproj)
      - MyApp.Database.Tests (csproj)

これは、非常に大規模なソリューションには扱いにくいかもしれませんが、15を超えるプロジェクトソリューションの経験はありません。

これを行うことの利点は、順序に合うように物事を巧妙に名前を変更する代わりに、より優れた命名方式を維持できることです(ただし、命名規則を見失う)。

2
Flater

プロジェクトの命名に一貫性を持たせます。つまり、各プロジェクトに両方の命名パートがあります。

アプリケーションレイヤーの2番目の部分を省略したくなるのは魅力的ですが、順序付けは別として、アプリケーションの複数の実装がある場合には問題になります。例えば:

{application}.{component}
MyApp.WpfApp
MyApp.WebApp
MyApp.IosApp
MyApp.BusinessModels
MyApp.DataAccessLayer
etc

実装が1つしかない場合、奇妙に思えるかもしれません。または、複数ある場合でも、それぞれに独自のソリューションがあります。

ただし、これらの名前はCIシステム、バグレポート、パッケージマネージャーなどのソリューションの外で使用されることを覚えておいてください。

0
Ewan