私はコードを開発するので、クラスのビルディングブロックのいくつかを、通常はプライベートであるとしても、それらをユニットテストすることがしばしばあります。私のユニットテストがプロジェクトの中にある場合、私はこれを達成するために "Friend"を使うことができ、通常の使用のために関数を非公開にします。しかし、私はむしろ自分のNUnitテストを別のプロジェクトに移したいと思う。私が探している効果をどのように達成するのですか?あなたは(簡単に)テストのテストプロジェクトからプライベート別のプロジェクトからの方法が、それは内部メソッドをテストするのは非常に一般的です(VBでFriend
)がInternalsVisibleToAttribute
を使用することはできませんVB .NETで個別のプロジェクトからプライベート関数をテストするにはどうすればよいですか?
5
A
答えて
11
。これにより、Friend
のメンバーは別のアセンブリからアクセスできます。
これはVB 9で新しくなったようですが、C#2で利用可能でしたが...確かに理由はわかりませんが、this blog post from Bart de Smetは簡単な例です。
プロダクションアセンブリが署名されている場合は、テストアセンブリにもサインする必要があるので、InternalsVisibleToAttribute
引数に公開鍵を指定する必要があります。詳細はthis Stack Overflow answerを参照してください。
3
Reflectionを使用してプライベートメソッドを呼び出すことができます。これを行うためのサンプルがたくさんあります。迅速なGoogle検索から
+0
これは私を最も助けてくれたものです:http://www.codeproject.com/KB/cs/testnonpublicmembers.aspx – demoncodemonkey
1
:http://www.codeproject.com/KB/cs/testnonpublicmembers.aspx
基礎:それはVB9で追加された理由として
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
関連する問題
- 1. .NETプロジェクトの.Net Coreプロジェクトからソースファイルを追加するにはどうすればよいですか?
- 2. ある関数から別の関数に引数を渡すにはどうすればよいですか?
- 3. gets.chompで関数をテストするにはどうすればよいですか?
- 4. Javascript Unittestingジャスミン/単体テスト - プライベート関数が呼び出されたかどうかをテストするにはどうすればよいですか?
- 5. GAEプロジェクトを1つのアプリケーションで個別に実行するにはどうすればよいですか?
- 6. コントローラを個別にリファクタリングするにはどうすればよいですか?
- 7. フラグメント内の関数を別の関数から呼び出すにはどうすればよいですか?
- 8. モデルフィールドに個別にアクセスするにはどうすればよいですか?
- 9. .NET Coreプロジェクトで.NET Frameworkプロジェクトを参照するにはどうすればよいですか?
- 10. Javascriptモジュールパターンでプライベート関数/変数を使用するにはどうすればよいですか?
- 11. Visual Studioで別のフォルダ/プロジェクトで個別にテストを実行するにはどうすればよいですか?
- 12. .netコア* .csprojベースのVSTSプロジェクト - xUnitテスト結果を公開するにはどうすればよいですか?
- 13. .NET Coreプロジェクトを.NET Frameworkプロジェクトに変換するにはどうすればよいですか?
- 14. Powershellコマンドレットを別のモジュールの関数からグローバルにインポートするにはどうすればよいですか?
- 15. 複数の列に沿って個数を区別するにはどうすればよいですか?
- 16. 別のモジュールからインポートしたクライアントAPI関数を使用している関数をテストするにはどうすればよいですか?
- 17. .NETのdllプロジェクトから(dll)参照を非表示にするにはどうすればよいですか?
- 18. 複数のキーで「個別」を効率的に実行するにはどうすればよいですか?
- 19. バックエンドコード(VB)からリストボックスで複数項目を選択するにはどうすればよいですか?
- 20. 一致する行を個別に数えるにはどうすればよいですか?ここで
- 21. 個別のvarchar要素からxmlを選択するにはどうすればよいですか?
- 22. 個別のJavaプログラムからアプレットを起動するにはどうすればよいですか?
- 23. ActionScript 2でどのような関数が別の関数と呼ばれるのかを調べるにはどうすればよいですか?
- 24. VB .NETでツリーコントロールをデータソースにバインドするにはどうすればよいですか?
- 25. 関数から&Pathを返すにはどうすればよいですか?
- 26. 関数からデータを返すにはどうすればよいですか?
- 27. 関数からテーブルを返すにはどうすればよいですか?
- 28. 関数からJoinHandleを返すにはどうすればよいですか?
- 29. 関数からdictを返すにはどうすればよいですか?
- 30. 別の関数を返す関数を作成するにはどうすればよいですか?
(これは、上記のリンクされたコードのプロジェクトのサイトから貼り付けている)、それがあったコスト/利益のトレードオフ。 VBはC#やInternalsVisibleToよりも名前解決の方法が非常に異なり、名前の検索が非常に複雑です。 VB8ではコストが高すぎてVB9に落ちました。私たちは実際にVB10で(cont) – JaredPar
(cont)アカウントの名前解決についてさらに変更を加えています。 – JaredPar
この回答に感謝します –