単体テストでプロジェクトを「使用」するか、それとも同じ名前空間を持っていますか?


9

バックグラウンド

C#.NETでプロジェクトに取り組んでいますが、Visual Studioのソリューションに新しい単体テストプロジェクトを追加しました。私がこれをいつもやっている方法は:

  1. 新しい単体テストプロジェクトを作成します。
  2. そのプロジェクトに、テスト中プロジェクトへの参照含めます
  3. プロジェクトを含めるusing)だけです。

あなたができる他の方法は...

  1. 新しい単体テストプロジェクトを作成します。
  2. そのプロジェクトに、テスト中プロジェクトへの参照含めます
  3. 作るユニットテストプロジェクトが持つ名前空間を共有テスト中のプロジェクトを

質問

.NETの世界のプロジェクトでこれを行うための受け入れられた方法はありますまたはこれは単なる意見であり、それ以上のものはありませんか?


3
同じ名前空間を使用すると、名前空間の競合が発生することになります。また、テスト対象のコードを含むアセンブリへの参照も必要です。
David Arno

2
私はデビッドと同意します。テストメソッドにテスト中のメソッドとは異なる名前を明示的に指定しない限り、名前の競合が発生する危険があります。名前空間を共有することがパーティーにどのような影響を与えるかはわかりません。
ロビーディー

2
それらが適切に記述されている場合、メソッド名はのようになるMethodName_StateUnderTest_ExpectedBehavior()ため、テストが競合することはありません。また、テストクラスに競合しない適切な名前が見つかるはずです。本当の質問は、これらのタイプをインテリセンスに表示したいですか?
Robert Harvey、

1
@DavidArno TDDはすべての状況に適用できるわけではありません。私のコードがすべて行って電子デバイスを読み取って結果を返す場合(EEがコードを作成する時間の99%です)...私が気にするのは、その時点で適切な値を取得できるかどうかだけです。テストの前か後かは関係ありません。
スヌープ2016年

1
@StevieV、申し訳ありませんが、真面目なコメントではなかったので(したがって、スマイリーフェイス)、それはそのように遭遇しなかったと思います。
David Arno、2016年

回答:


13

単体テストは別のプロジェクトにあり、メインコードとは別の機能を提供するため、それらを別の名前空間に配置するのが最も理にかなっています。

using行を保存するためだけに同じ名前空間に配置することを検討している場合は、しないでください。少ないコードは良いです、より明確なコードは良いです。


2
そして、単体テストをリリース/配布/デプロイしたくないのです。
radarbob

1
テストを別の名前空間に置くと、(一部の言語では)サードパーティのコンシューマーと同じようにAPIが表示されます。つまり、同じ名前空間のクラスにのみアクセスできるメンバーにはアクセスできません。便利なことに、公開APIメンバーが参照されていない、または不必要に公開されているという誤った警告は、テストによって沈黙されます。
StackOverthrow 2018年

@TKK C#に関する質問です。C#では、名前空間はそのように機能しません。
2018年

@svick:はい、C#は各アセンブリに独自の名前空間を与えることを強制しません。ただし、これは特に大規模なプロジェクトでは便利な規則であり、単体テストアセンブリを他のアセンブリと異なる方法で処理することはありません。
Doc Brown

0

Tests問題のない数年間、実際のプロジェクトと同じ名前空間の単体テストプロジェクトを使用しました(テストプロジェクトの名前空間のサフィックスを手動で削除する)。

私はそれがより簡単なコードにつながると思うので、私は通常、そのアプローチをとることをお勧めします。名前空間の競合の可能性などのいくつかの欠点は、ユニットテストプロジェクトを処理するときに発生しないはずTestsです。さらに、クラスとテストクラスを同じ名前空間に置くことは、私には非常に直感的に聞こえます。

奇妙だと思う人もいますが、多くのフレームワークアセンブリが同じ名前空間にクラスを持つ複数のDLLを持つこの戦略を使用しているため、これは実際には当てはまりません。これは驚くべきことでも悪いことでもありませんそれ自体で練習します。

これは個人的な好みの方が多いと思うので、それ自体は「答えられる」とは言えません。とはいえ、上記の推論のとおり、「私の投票」とは、最初は自分で試してみることです。アプローチが気に入った場合は、ぜひ試してみてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.