2008-09-09 3 views

答えて

89

InternalsVisibleToレスキューに属性!

だけ追加します。

[assembly:InternalsVisibleToAttribute("UnitTestAssemblyName")] 

をあなたのコアクラスAssemblyInfo.csファイル

ベストプラクティスのためのFriend Assemblies (C# Programming Guide)を参照してくださいに。

+3

私は、akuがリンクするガイダンスに従って、厳密に名前付きのアセンブリでこれを成功させました。私は1つの問題があった。すべての設定が完了したら、Intellisenseを動作させるためにVisual Studioを再起動しなければなりませんでした。再起動する前にコンパイルされますが、常に赤い線が表示されます。 –

2

リフレクション(MSテスト項目のように)を使用することも、ユニットテストアセンブリをコアアセンブリのフレンドに宣言することもできます。

もう1つのオプションは、ユニットテストを同じアセンブリに配置することです。 InternalsVisibleで

20

あなたのアセンブリは強くあなたは、公開鍵(注:フルキーない公開キートークン)を指定する必要が命名されている場合たとえば...

[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("BoardEx_BusinessObjects.Tests, 
    PublicKey=0024000004800000940000000602000000240000525341310004000001000100fb3a2d8 etc etc")] 

と、次のトリックがあります私は、このようなトラブル...あなたは本当にユニットTESにしたい場合には行かないことをお勧め

http://www.andrewconnell.com/blog/archive/2006/09/15/4587.aspx

+0

残念ながら参照リンクは機能しません。 – toong

+0

ありがとうございました。私はそれを更新しました。 –

2

... CMDラインに頼ることなく、公開鍵を取得するための非常に便利あなたの内部クラスだけを名前空間に隠して、あなたの内部コードだけが使用するようにしてください。 本当にには、そのレベルの隠れが必要です。

+0

私はあなたのコメントを下に気づいたときに言ったことを正確にコメントするつもりでした。 +1! :) –

9

単体テストをテストするコードと同じアセンブリに配置しました。これは私にとって意味があります。なぜなら、自分自身を "自分自身を初期化する"や "自分自身を記述する"のようなものとともに、クラスの機能として「自分自身をテストする」と考えるからです。

私はこのアプローチにいくつかの異論を聞いたことがありますが、納得している人はほとんどいません。

パフォーマンスが痛いバー、私は言う!ハードデータなしで最適化しないでください!おそらく、アセンブリを低速リンクを介してダウンロードするよう計画している場合、アセンブリサイズを最小限に抑えることは価値があります。

セキュリティリスクです。あなたのテストで秘密がある場合のみ。それをしないでください。

あなたの状況は私のものとは異なるので、おそらくそれはあなたにとって意味をなさないでしょうし、そうでないかもしれません。あなたはそれを理解しなければなりません。

別名:C#では、私は一度、テストしていたクラスの中にネストされた "Tests"というクラスにユニットテストを入れようとしました。これにより、物事の正しい構成が明らかになりました。また、クラス "Foo"のテストが "FooTests"と呼ばれるクラスにある場合に発生する名前の重複も避けました。しかし、私がアクセスしたユニットテストフレームワークは、「公開」とマークされていないテストを受け入れることを拒否しました。つまり、テストしているクラスを「プライベート」にすることはできません。誰も本当に公的な方法として呼ぶことはないので、私はテストを「パブリック」にする必要があるという正当な理由は考えられません。すべてが反映されています。のためのユニットテストフレームワークを書く場合。ネット、私のために非公式のテストを許可することを検討してください!

+5

面白いアプローチ。私はテストが公開されていることに全く同意します。愚かな要件、IMO。 – Kilhoffer

+0

@Kilhoffer:私は何年もそれについて不平を言ってきました。そして、あなたは本当に私に同意する最初の人です。ありがとう! –

+6

テストクラスで '[条件付き(" DEBUG ")]'を使用した場合、それらは実動アセンブリ内にあってはならず、パフォーマンスを損なうことはありません。 – xmedeko

関連する問題