【发布时间】:2022-01-16 09:35:18
【问题描述】:
我有一个重写方法的子类:
public class Parent {
public virtual string Foo(string s) {
//...
}
}
public class Child : Parent {
public override string Foo(string s) {
s = s + "123";
return base.Foo(s); // <---- how do I detect this call?
}
}
我可以测试是否调用了被覆盖的方法:
var mock = Substitute.ForPartsOf<Child>();
mock.Foo("abc");
mock.Received(1).Foo(Arg.Any<string>());
但是如何检测到调用了 BASE 方法?
【问题讨论】:
-
我认为不可能检测到碱基调用本身。您可能需要对调用结果进行断言。有一些discussion of this here。
-
@DavidTchepak 如果可以的话,是否跟进?我有一个想法,对于上面的示例,它应该调用该方法两次。所以
mock.ReceivedCalls()应该包含两个对应的调用——但它只包含一个。这也是框架的限制,还是由库强制执行? -
对于上面的例子,我希望
ReceivedCalls()中只有一项(mock.Foo("abc")调用。
标签: c# .net unit-testing nsubstitute