Using autofac with moq

Delashmate picture Delashmate · Nov 9, 2011 · Viewed 13.8k times · Source

I need to register my Autofac container with specific interface, for this case I want to resolved mock.

How can I do it?

I've tried:

var AppContainer = ApplicationContainer.GetApplicationContainer();  
var cb = new ContainerBuilder();
cb.RegisterType<Mock<IStudyLoader>>().As<IStudyLoader>().SingleInstance();
cb.Update(AppContainer);

I don't want to change my code to resolve something else than IStudyLoader, but Mock<IStudyLoader> is not substitutable for IStudyLoader; e.g Mock<IStudyLoader>.Object is substitutable for IStudyLoader, but I cant register Mock<IStudyLoader>.Object because it not a type.

Correct me please; I have the feeling that I am missing something.

(I have another restriction, I can't use other container than ApplicationContainer.GetApplicationContainer())

(I think it's better to manually inject the dependency when testing, but I don't want to change the production code this time.)

Answer

Delashmate picture Delashmate · Nov 9, 2011

I found the solution, Yes it is possible!

  var AppContainer = ApplicationContainer.GetApplicationContainer();
  var studyLoaderMock = new Mock<IStudyLoader>().Object;
  cb.RegisterInstance(studyLoaderMock).As<IStudyLoader>();
  cb.Update(AppContainer);