3

問題が発生しているようです。コンストラクターで IUser を受け入れるクラス (LoginService) があります。これは、単体テストではなく統合テストを実行するためのものです。そのため、これらをモックしたくありません。すでにいくつかの単体テストがあり、フィクスチャで Moq を使用してうまく機能しています。

私はフィクスチャをセットアップしました:-

  var fixture = new Fixture();

そして、IUser のバージョンをフリーズできるようにしたいです。

  var user = fixture.Freeze<IUser>();

だから私はそれを次のようにして動作させることができました

  IUser user = new User();  // Create my IUser manually
  fixture.Inject(user);

そして最後にsutを作成し、インスタンスが十分に注入されるようにします。

  var sut = fixture.Create<LoginService>();

だから私はこれを正しくやっていますか?Freeze を使用できないので、引き続き IUser を手動で作成し、それをフィクスチャに挿入する必要がありますか?

ヘルプや情報をお待ちしております

4

2 に答える 2

4

はい、そのとおりです。 の特定のインスタンスを提供する場合はIUserLoginServiceそれを注入する必要があります。

Injectの後続のすべてのリクエスト (存在する場合) に影響することに注意してIUserください。

于 2013-07-02T09:55:17.513 に答える
3

Nikos Baxevanis の答えは正しいですが、その猫の皮を剥ぐ方法はたくさんあります。

同じユーザー インスタンスではなく、毎回新しいUserインスタンスが必要な場合は、次のようにマップすることもできIUserます。

fixture.Customizations.Add(
    new TypeRelay(
        typeof(IUser),
        typeof(User)));
于 2013-07-02T15:14:37.477 に答える