将 Moq 模拟对象注册为 Unity 容器的类型

Register a Moq mock object as type for a Unity container

因为我的 sut class 有一个以 IUnityContainer 作为参数的构造函数,我想在我的单元测试中设置一个新的 Unity 容器并将其传递给 sut。 我喜欢在这里使用 Moq,因为我还必须对某些方法调用进行 veryfy。 我在这里尝试的是

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。 有什么想法可以解决这个问题吗?

您已经有对象 IFoo fooMock 的实例,因此您需要使用 RegisterInstance 方法注册:

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