【问题标题】:Detect call to base class method using NSubstitute使用 NSubstitute 检测对基类方法的调用
【发布时间】: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


【解决方案1】:

根据@DavidTchepak 的评论,这是底层框架的限制。无法做到,但可以重新设计以避免此问题。

【讨论】:

    猜你喜欢
    • 2014-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多