UnityAutoMoqContainer の使用を開始しました。ここにリンクが あります。特に container.GetMock() 呼び出しに関して、以下の 2 つの質問があります。
以下の Assert は成功すると思いますが、例外がスローされます。
private UnityAutoMoqContainer container; [SetUp] public void SetUp() { container = new UnityAutoMoqContainer(); } [Test] public void Are_mocks_Same(){ var serviceMock = new Mock<IService>(); var getMock = container.GetMock<IService>(); Assert.AreSame(getMock, serviceMock); }
エラー 1 テスト 'UnityAutoMoq.Tests.UnityAutoMoqContainerFixture.Are_mocks_Same' が失敗しました: 予想: C:\Users の UnityAutoMoq.Tests.UnityAutoMoqContainerFixture.Are_mocks_Same() と同じです……。
では、なぜ "Expected" と "But was" が同じ場合でも例外がスローされるのでしょうか?
私が見る違いは、GetMockが Unity を使用して、新しい Mockが解決しないi,e Resolve()依存関係を解決することです。しかし、この例外の原因を説明することはできません。
抽象型の解決:
以下のように、Moq.Mock を使用して抽象型を解決します。
var httpContextBaseMock = new Mock<HttpContextBase>();
ただし、以下の UnityAutoMoqContainer への呼び出しは例外をスローします。
var mock = container.GetMock<HttpContextBase>();
依存関係の解決に失敗しました。タイプ = "System.Web.HttpContextBase"、名前 = "(none)"。例外が発生しました: 解決中。例外: InvalidOperationException - 型 HttpContextBase を構築できません。この値を提供するようにコンテナーを構成する必要があります。
問題は、コンテナがモックされた抽象型を返すのを容易にしないのはなぜですか?