1

AutoFixture を使用して最初のテストを作成しました。SUT には次のコンストラクターがあります。

public LoggingService(
    IClientDataProvider clientDataProvider, ... other dependencies...)

テスト セットアップには次のコードがあります。

var fixture = new Fixture().Customize(new AutoMoqCustomization());

string ipAddress = "whatever";// fixture.CreateAnonymous<string>();

var clientDataProviderMock = fixture.Freeze<Mock<IClientDataProvider>>();
clientDataProviderMock.Setup(cdp => cdp.IpAddress).Returns(ipAddress);

LoggingService sut = fixture.CreateAnonymous<LoggingService>();

の内容を調べると、注入された のインスタンスのsutプロパティが「whatever」ではなく null を返すことがわかります。IpAddressIClientDataProvider

私は何を間違えましたか?


サービスと必要なインターフェイスを空のプロジェクトにコピーすると、モックが期待どおりに機能しました。

実際のプロジェクトのサービスのコンストラクター引数の型であるインターフェイスは、さらに依存関係を持つ 3 つの個別のアセンブリで定義されます。直接参照されたアセンブリにはさらにいくつかのアセンブリが必要だったため、テストの開始時に予期しない「アセンブリを読み込めません」というエラーがいくつか発生しました。したがって、アセンブリの読み込みの問題のようです。

ただし、Moqを使用して手動で作成されたモックオブジェクトを使用してSUTインスタンスを手動で作成するテストのバリエーションを試したところ、テストは期待どおりに機能しました

4

1 に答える 1

1

解決策はかなり驚くべきものでした。単体テスト プロジェクトを作成していたとき、最初に Moq 4.0 への参照を追加しました。AutoFixture は後で追加され、Moq 3.1 が必要と思われるため、その dll を bin\Debug に直接コピーしました。ただし、プロジェクト ファイル内の対応する HintPath 要素は、依然として 4.0 dll を指しています。Moq 3.1 が置かれている場所を指すように HintPath を変更するとすぐに、テストが適切に機能し始めました。マークの提案は正しかったのですが、症状はかなり異なっていました。

于 2012-09-18T11:45:05.120 に答える