コードを開発するとき、通常はプライベートであっても、クラスの構成要素の一部を単体テストしたいことがよくあります。単体テストがプロジェクト内にある場合、「Friend」を使用してこれを達成し、通常の使用のために関数をプライベートに保つことができます。しかし、NUnit テストを独自の別のプロジェクトに移動したいと考えています。求めている効果を得るにはどうすればよいですか?
3142 次
3 に答える
11
別のプロジェクトのプライベートメソッドを (簡単に) テストすることはできませんがFriend
、InternalsVisibleToAttribute
. これにより、Friend
メンバーは別のアセンブリにアクセスできるようになります。
どうやらこれは VB 9 の新機能でしたが、C# 2 では利用可能でした...理由はよくわかりませんが、Bart de Smet のこのブログ投稿で簡単な例を示しています。
運用アセンブリが署名されている場合は、テスト アセンブリも署名する必要があり、InternalsVisibleToAttribute
引数で公開キーを指定する必要があることに注意してください。詳細については、このスタック オーバーフローの回答を参照してください。
于 2009-03-15T21:33:08.070 に答える
3
Reflection を使用してプライベート メソッドを呼び出すことができます。これを行うためのサンプルがたくさんあります。
于 2009-03-15T22:03:48.260 に答える
1
簡単な Google 検索から: http://www.codeproject.com/KB/cs/testnonpublicmembers.aspx
基本: (これは上記のコード プロジェクト サイトから貼り付けたものです)
public static object RunStaticMethod(System.Type t, string strMethod,
object [] objParams)
{
BindingFlags eFlags =
BindingFlags.Static | BindingFlags.Public |
BindingFlags.NonPublic;
return RunMethod(t, strMethod,
null, aobjParams, eFlags);
} //end of method
public static object RunInstanceMethod(System.Type t, string strMethod,
object objInstance, object [] aobjParams)
{
BindingFlags eFlags = BindingFlags.Instance | BindingFlags.Public |
BindingFlags.NonPublic;
return RunMethod(t, strMethod,
objInstance, aobjParams, eFlags);
} //end of method
private static object RunMethod(System.Type t, string
strMethod, object objInstance, object [] aobjParams, BindingFlags eFlags)
{
MethodInfo m;
try
{
m = t.GetMethod(strMethod, eFlags);
if (m == null)
{
throw new ArgumentException("There is no method '" +
strMethod + "' for type '" + t.ToString() + "'.");
}
object objRet = m.Invoke(objInstance, aobjParams);
return objRet;
}
catch
{
throw;
}
} //end of method
于 2009-04-17T17:20:07.370 に答える