【发布时间】:2019-09-18 14:31:40
【问题描述】:
使用 NSubstitute,可以使用 Substitute.ForPartsOf<T>() 仅模拟特定方法。但这将默认调用真实方法,除非您专门配置要模拟的方法,例如mySubstitute.Configure().MyMethod().Returns(/*whatever*/).
我想做相反的事情:创建一个默认模拟所有方法的替代品,然后指定一个特定的方法来进行真正的调用。
有没有一种干净的方法可以做到这一点?
我能想到的最佳方法是(未经测试):
MyClass realObj = new MyClass();
var subst = Substitute.For<MyClass>();
subst.MyMethod().Returns(realObj.MyMethod());
我想我正在寻找这样做的捷径:
var subst = Substitute.ForPartsOf<MyClass>();
// Mock all methods except MyMethod:
subst.Configure().MyOtherMethod().Returns(/*whatever*/)
subst.Configure().MyThirdMethod().Returns(/*whatever*/)
// ...
subst.Configure().MyLastMethod().Returns(/*whatever*/)
【问题讨论】:
-
想一想,我认为我建议的方法行不通。
realObj.MyMethod()调用将对realObj的真实方法进行任何内部调用,而不是调用subst上的那些,对吧?
标签: c# mocking nsubstitute