2017-02-14 10 views
26

現在、.NET標準1.6ライブラリを作成して最新のVisual Studio 2017リリース候補を使用しています。私はxUnitを使用して私のコードをテストし、VS2017の内部メソッドをテストできるかどうか疑問に思っていました。ユニットの内部テストVS2017 .Net標準ライブラリ

私は私がいたVS2017ネット標準のプロジェクトにはAssemblyInfo.csクラスが存在しないので、あなたが指定したプロジェクトを可能にするVS2015でのすべてのラインAssemblyInfo.csクラスは内部メソッド

[assembly:InternalsVisibleTo("MyTests")] 

を見ることができることを覚えておいてくださいあなたはまだユニット内部メソッドをテストすることができますか? .NET docs for the InternalsVisibleToAttributeによれば

+3

あなたのコードを外部から見える機能から単体テストすることができます。結局のところ、外部コードからの論理パスがそれらの内部メソッドに到達できない場合、最初にそこで何をしていますか? – David

+1

@David私はこれを行うことができますが、これまでにいくつかの内部クラスの周りに単純な単体テストを入れました。テストでより明示的にするだけです。 –

+1

AFAIKの場合、この属性は 'namespace'ブロックの外側の他のファイルに置くことができ、コンパイルする必要があります。 'AssemblyInfo.cs'には魔法がありません。それは動作しませんか?もちろん、正しい 'using'節を追加するか、完全修飾属性' [assembly:System.Runtime.CompilerServices.InternalsVisibleTo( "Something")] 'を使用する必要があります。 – Groo

答えて

45

属性は、アセンブリレベルで適用されます。つまり、ソースコードファイルの先頭に含めることも、Visual StudioプロジェクトのAssemblyInfoファイルに含めることもできます。言い換えれば

、単にあなた自身の任意の.csという名前のファイルにそれを置くことができ、それが正常に動作する必要があります:

// some .cs file included in your project 
using System.Runtime.CompilerServices; 
[assembly:InternalsVisibleTo("MyTests")] 
+1

うん、それは動作します。決してそれを考慮していない:-) –

+1

@PhilMurray:また、[classic]の "AssemblyInfo.cs"ファイルを作成するための設定があるようです。[here](http://stackoverflow.com/a/42183749/69809)。それ以外の場合、 "description"、 "copyright"などの属性はすべて.csprojファイル内に格納されます。 – Groo

2

「InternalsVisibleTo」属性は白」の任意の並べ替えの鍵であります-box "(10年の言葉、私は推測する).Netのテスト。これは、フロントに "assembly"属性を持つ任意のC#ファイルに置くことができます。 MS DOCは、アセンブリ名が署名されていれば、公開鍵トークンによって修飾されていなければならないことに注意してください。時にはそれはうまくいかず、その場所で完全な公開鍵を使用しなければなりません。内部へのアクセスは、並行システムのテストや他の多くの状況で重要です。 https://www.amazon.com/xUnit-Test-Patterns-Refactoring-Code/dp/0131495054を参照してください。このマニュアルでは、Meszarosは基本的にプログラム開発のための "Design For Test"アプローチを構成するさまざまなコーディングスタイルについて説明しています。少なくとも私はそれを長年にわたって使ってきた方法です。

関連する問題