代码之家  ›  专栏  ›  技术社区  ›  Kris

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

  •  6
  • Kris  · 技术社区  · 10 年前

    因为我的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 . 有什么想法我可以做什么,或者什么可以替代这个问题?

    1 回复  |  直到 10 年前
        1
  •  11
  •   Backs    9 年前

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

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