Mocking an IoC Container?

前端 未结 2 1901
心在旅途
心在旅途 2021-01-15 03:52

Does it make sense to mock an IoC container? If so how would I go about it, using Moq?

I am creating a Prism 4 app, using Unity 2.0 as the IoC container. I inject th

2条回答
  •  余生分开走
    2021-01-15 04:06

    I agree with Mark Seemann's answer generally for 99% of classes this works fine.

    There are some factory type classes (perhaps classes that take a Model and convert it to a ViewModel where those ViewModels have dependencies) for which this doesn't work. In these cases, I generally accept the interface for the container, rather than its concrete type (IUnityContainer, in your case) and mock as usual.

    public class MyWidgetFactory : IMyWidgetFactory
    {
         public MyWidgetFactory(IUnityContainer container)
         {
              //...
         }
         public Widget[] GetWidgets()
         {
             //...
         }
    }
    
    public class MyWidgetFactoryConsumer
    {
         private Widget[] _widgets;
         public MyWidgetFactoryConsumer(IMyWidgetFactory factory)
         {
              _widgets = factory.GetWidgets();
         }
    }
    

    Both of the above classes are testable, with the factory class needing to have a mocked version of the IUnityContainer and the consumer needing only the factory itself mocked.

提交回复
热议问题