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

Kri*_*ris 3 c# unit-testing moq unity-container

由于我的sut类具有带有IUnityContaineras参数的构造函数,因此我想在单元测试中设置一个新的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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是这导致的ResulutionFailedException。有什么想法我可以做什么,或者可以替代这个问题?

Bac*_*cks 5

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

container.RegisterInstance<IFoo>(fooMock.Object);
Run Code Online (Sandbox Code Playgroud)