Delashmate Delashmate - 14 days ago 7
C# Question

Using autofac with moq

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

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);