0

EDIT:静的メソッドをモックできるC#モックフレームワークを探していますこの質問は私の問題の解決策を提供しません。

静的メソッドの模擬単体テストを無料で行うことはできません(ある場合は提案してください)。

外部の dll を使用せずにモック テストをカスタマイズする方法はありますか。

カスタマイズされた模擬単体テストを開始するための解決策を提案してください。

チュートリアルのリンクも非常に役立ちます。

4

3 に答える 3

4

静的メソッドのモッキングを可能にする既存のフレームワークがあります: 静的メソッドのモッキングを可能にする C# モッキング フレームワークを探しています

そうは言っても、モックしたいのが独自のコードである場合は、次の単純な経験則に従ってください。副作用のある静的メソッドを作成しないでください。そうすれば、静的メソッドをモックする必要がなくなり、副作用のあるメソッド (多くの場合モックが必要になります) を既存のフレームワークで簡単にモックできます。

静的をモックする必要があり、既存のフレームワークにお金を払いたくない場合は、独自のフレームワークを作成する必要があります。1 つのルートは、PostSharp ( http://www.postsharp.net ) のようなものを使用することです。これは、メソッドのインターセプトを含む、メソッドの静的動作の変更をサポートします。詳細については、 http: //www.postsharp.net/aspects/method-decorator をお読みください。無料版の PostSharp が利用可能ですが、ライセンスの詳細を確認して、それらが自分のケースに適用されるかどうかを確認する必要があります。

于 2013-11-04T12:42:27.787 に答える
1

既存のモック フレームワークを使用したくない理由がわからない (それらはRhino モックのような無料のライブラリがたくさんあります)

ただし、Reflection.Emit を使用して独自のモックを実装することはできます。

これは、実行時に動的型を発行する方法に関する優れたチュートリアルです (たとえば、メソッドの結果を取得するためにイベントを体系的に呼び出すインターフェイスを動的に実装できます)。

これはインターセプト プロキシを作成する方法です (インターフェイスをモックするために使用できますが、Reflection.Emit の適用範囲ははるかに広いです)。

これは .Net フレームワークの一部です。サードパーティのライブラリは必要ありません。

[編集] 静的メソッドのコンテンツをオーバーライドする唯一の方法は、IL インジェクションを使用することです。これは非常に厄介な方法ですが、効率的です (ただし、テストにのみ使用してください...これは CLR のハッキングです!)。

詳細については、このリンクを参照してください。これにより、メソッドの IL を別のものに置き換える (または手動でパッチを適用する) ことができます。

于 2013-11-04T12:30:57.277 に答える
0

フレームワークを使用せずに静的メソッドをモックしたい場合は、テスト対象のクラスの仮想メソッドを介して静的メソッドを抽象化する手法を検討できます。

アイデアは、スタブまたはテスト クラス自体を介して仮想メソッドをオーバーライドできるということです。

次の例を見てください: http://www.unit-testing.net/CurrentArticle/How-To-Remove-Data-Dependencies-In-Unit-Tests.html

于 2013-11-05T03:07:26.513 に答える