5

私は単体テストは比較的初めてで、C# も非常に新しいのですが、静的メソッドで静的クラスを使用するコードをテストしようとしてきました。テストするために大量の定型コードを書かなければならないようですそのコードもおそらくテストする必要があります。

例: System.Web.Security.Membership クラスを使用しており、そのValidateUser上にメソッドがあります。IMembershipメソッドを含むインターフェイスを作成してから、メソッドを実装し、引数を実際のクラスに渡すValidateUserクラスを作成する必要があるようです。次に、テスト中にモック オブジェクトの依存関係を注入できるように、ラッパーを参照するためにを使用するクラスのプロパティが必要です。MembershipWrapperIMembershipValidateUserMembershipMembership

を使用する 1 行のコードをテストするにはMembership、インターフェイスとクラスを作成し、プロパティとコンストラクタ コードをクラスに追加する必要がありました。これは間違っているように見えるので、何か間違っているに違いありません。このテストはどのように進めればよいですか?依存性注入を行ういくつかのフレームワーク/ライブラリを簡単に見てきましたが、それでも多くのボイラープレート、または内部で何が起こっているかについての非常に深い理解が必要なようです。

4

4 に答える 4

3

あなたは正しい道を進んでおり、単一行のコードをテストしていないと思います。この場合、コードがメンバーシップ プロバイダーと正しい方法で対話することを確認するための重要なテストを書いています。これは単純な単体テストではなく、「モック-ベースの」統合テスト。これらすべてのモックを作成する価値があると思い、アプリケーションのこの部分をテストでカバーしました。

はい、それはやり過ぎのようですが、他に方法はありません-いくつかのヘルパー/ライブラリを使用するか、サードパーティの静的依存関係を自分でラップします。

于 2013-07-05T15:04:50.210 に答える
0

VS2012 を使用している場合は、Microsoft Fakes の Shim を静的呼び出し (または .Net ライブラリ呼び出しも) にいつでも使用できます。

http://msdn.microsoft.com/en-us/library/hh549175(v=vs.110).aspx

http://msdn.microsoft.com/en-us/library/hh549176.aspx

于 2013-07-05T15:21:38.493 に答える
0

コンストラクター注入のアプローチに満足していない場合は、 Ambient Contextの使用を検討できます

基本的に、呼び出すデフォルトを設定しますSystem.Web.Security.Membership.ValidateUser

次に、コードのコンテキストで公開されたメソッドを呼び出すと、テスト用にモックできるようになりました

これにより、セットアップ コードを少なく記述できますが、依存関係があるという事実も隠されます。これは、将来問題になる可能性があります (コードの再利用方法によって異なります)。

于 2013-07-05T15:10:53.177 に答える