I have started using the UnityAutoMoqContainer Here is the Link and I have below 2 questions in particularly around container.GetMock() call.
I would expect the below Assert to succeed however it throws an exception.
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); }
Error 1 Test 'UnityAutoMoq.Tests.UnityAutoMoqContainerFixture.Are_mocks_Same' failed: Expected: same as at UnityAutoMoq.Tests.UnityAutoMoqContainerFixture.Are_mocks_Same() in C:\Users…….
So why when "Expected" and the "But was" are same it still throws an exception?
The difference I see is that GetMock uses the Unity to resolve i,e Resolve() dependencies where the new Mock doesn’t. But I cannot explain my self the cause of this exception.
Resolving abstract types:
I use the Moq.Mock to resolve an abstract type as below.
var httpContextBaseMock = new Mock<HttpContextBase>();
However the below call to the UnityAutoMoqContainer throws the exception:
var mock = container.GetMock<HttpContextBase>();
Resolution of the dependency failed, type = "System.Web.HttpContextBase", name = "(none)". Exception occurred while: while resolving. Exception is: InvalidOperationException - The type HttpContextBase cannot be constructed. You must configure the container to supply this value.
The question is why the container does not facilitate to return a mocked abstract type?