Mock——接口的部分方法使用已有实现,部分使用mock实现

           
           //mock设置默认值
            var requestMocService = new Mock<IRequestService>() ;
            requestMocService.DefaultValue = DefaultValue.Mock; //new RequestServiceClient(null);
            requestMocService.CallBase = true;
            //默认值的instance为真实实现
            requestMocService.DefaultValueProvider =new ZeroDefaultValueProvider<IRequestService>(new RequestServiceClient(null));
            requestMocService.Setup(n => n.SaveAccountIOInsertionRequest(It.IsAny<SaveAccountIOInsertionRequest>())).Returns(new SaveAccountIOInsertionResponse()
            {
                RequestId = 100
            });
             _services.AddSingleton(requestMocService.Object);


    
    class ZeroDefaultValueProvider<T> : DefaultValueProvider where T :class
    {
        T _instance;
        public ZeroDefaultValueProvider(T instance)
        {
            _instance = instance;
        }
        protected override object GetDefaultValue(Type type, Mock mock)
        {
            return type.IsValueType ? Activator.CreateInstance(type) : null;
        }
        //重写获取默认值的方法
        protected override object GetDefaultReturnValue(MethodInfo method, Mock mock)
        {
           // parameters[0].CopyTo(objEntity);

            // 1.Load(命名空间名称),GetType(命名空间.类名)
            // 3.调用的实例化方法(非静态方法)需要创建类型的一个实例
            //4.方法需要传入的参数
            // 5.调用方法,如果调用的是一个静态方法,就不需要第3步(创建类型的实例)
            // 相应地调用静态方法时,Invoke的第一个参数为null
            return method.Invoke(_instance, mock.Invocations[0].Arguments.ToArray());
        }
    }

  

猜你喜欢

转载自www.cnblogs.com/panpanwelcome/p/12467533.html