//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()); } }