4

Autofac.Extras.Moq.AutoMock を使用しています。今、私は Lazy<> を使用してコンストラクターの依存関係を持っています

public MyService(Lazy<IDependency> myLazyDependency) {...}

テストMyServiceするには、 をモックする必要がありLazy<Dependency>ます。

私はこれを試しています

[ClassInitialize]
public static void Init(TestContext context)
{
    autoMock = AutoMock.GetLoose();
}

[TestInitialize]
public void MyTestInitialize()
{
     var myDepMock = autoMock.Mock<Lazy<IDependency>>();  // <-- throws exception
}

これは、テスト ランナーによって返される例外です。

初期化メソッド Tests.MyServiceTests.MyTestInitialize が例外をスローしました。System.InvalidCastException: System.InvalidCastException: タイプ 'System.Lazy 1[IDependency]' to type 'Moq.IMocked1[System.Lazy`1[IDependency]]' のオブジェクトをキャストできません..

では、automock を使用して Lazy<> モック オブジェクトを渡すにはどうすればよいでしょうか。

4

1 に答える 1

5

Lazymockはフレームワークの一部であるため (いくつかの極端な状況を除いて)、モックする必要はありません。単純にモックIDependencyして、モックされたオブジェクトを に渡すことができますLazy

このようなものが動作するはずです:

var mockDependency = autoMock.Mock<IDependency>();
var mockObject = mockDependency.Object; //(Not entirely sure of the property for this library)
var mockedLazy = new Lazy<IDependency>(() => mockObject);

Lazyこれは、テストに対して本質的に何もしないことを意味することに注意してください(それが問題である場合)-最初に使用されたときに、すでに作成されたモックを返すだけです

于 2016-03-07T22:41:52.547 に答える