首页 > 解决方案 > 如何设置 Mock 已经将对象呈现为默认行为?

问题描述

我可以做这个:

var alreadyPresentMyClass = GetMyClass();//retrieving MyClass from somewhere

var mock = new Mock<IMyClass>();
mock.Setup(x=> x.Method1()).Callback(alreadyPresentMyClass.Method1);
mock.Setup(x=> x.Method2()).Callback(alreadyPresentMyClass.Method2);
....
mock.Setup(x=> x.Method666()).Throws(new Exception("BAD LUCK")); //this is only method which is throwing error in this test. So the only one I want to setup.
....
mock.Setup(x=> x.Method1000()).Callback(alreadyPresentMyClass.Method1000);

如何删除设置数千个方法的不必要垃圾,而是基于另一个对象默认设置它,如下所示:

var mock = Mock.CreateByAlreadyPresent(GetMyClass());
mock.Setup(x=> x.Method666()).Throws(new Exception("BAD LUCK"));

有什么想法吗?我可以自己写反射方法,但是已经有这样的方法了吗?

标签: c#testingmockingmoq

解决方案


您将为此使用属性 CallBase:

var mock = new Mock<MyClass> { CallBase = true };
mock.Setup(x => x.Method666()).Throws(new Exception("BAD LUCK"));

其他方法将具有其默认行为。


推荐阅读