As the title says, I'm attempting to resolve an interface that implements a concrete class that also takes a constructor.
Here's the concrete service class as an example:
public class MessageService : IMessageService
{
private readonly IMessageGenerator _messageGenerator;
public MessageService(IMessageGenerator messageGenerator)
{
_messageGenerator = messageGenerator;
}
public string GetMessage()
{
return string.Concat(_messageGenerator.GetMessage(), "");
}
}
As you can see this service class also requires an interface as a constructor parameter. The MVC controller constructor looks like this:
private readonly IMessageService _messageSvc;
public HomeController(IMessageService messageSvc)
{
_messageSvc = messageSvc;
}
I have resolved the interfaces in a Bootstrapper thanks to Unity.Mvc3
var container = new UnityContainer();
container
.RegisterType<IMessageService, MessageService>()
.RegisterType<IMessageGenerator, MessageGenerator>();
So the main issue I'm having is how can I pass a mocked instance of the IMessageGenerator interface to the IMessageService inside a unit test using UnityAutoMoq? I would think that something like this would work, but it doesn't:
[TestMethod]
public void Index()
{
var container = new UnityAutoMoqContainer();
var controllerContext = container.Resolve<ControllerContext>();
var nMsgSvc = container.Resolve<IMessageService>(container.Resolve<IMessageGenerator>);
var sut = new HomeController(nMsgSvc) { ControllerContext = controllerContext };
ViewResult result = sut.Index() as ViewResult;
Assert.AreEqual("Hello from the MessageGenerator via the MessageService", result.ViewBag.Message);
}