将最小起订量模拟对象注册为 Unity 容器的类型

本文关键字:Unity 类型 注册 对象 模拟 | 更新日期: 2023-09-27 18:32:31

由于我的sut类有一个构造函数,IUnityContainer作为参数,我喜欢在我的单元测试中设置一个新的Unity容器并将其传递给sut。我喜欢在这里使用 Moq,因为我还必须非常需要某些方法调用。我在这里尝试的是

public interface IFoo
    {
        void Bar();
    }
    class Program
    {
        static void Main(string[] args)
        {
            var fooMock = new Mock<IFoo>();
            fooMock.Setup(x => x.Bar()).Callback(() => Console.WriteLine("Hello"));
            IUnityContainer container = new UnityContainer();
            container.RegisterType(typeof (IFoo), fooMock.Object.GetType());
            var sut = container.Resolve<IFoo>();
            sut.Bar();
            Console.Read();
        }
    }

但这会导致ResulutionFailedException.任何想法我能做什么或这个问题的替代方案是什么?

将最小起订量模拟对象注册为 Unity 容器的类型

你已经有一个对象 IFoo fooMock 的实例,所以你需要使用 RegisterInstance 方法注册:

container.RegisterInstance<IFoo>(fooMock.Object);