C# 如何在NSubstitute中通过超类匹配参数来存根方法?

C# 如何在NSubstitute中通过超类匹配参数来存根方法?,c#,unit-testing,nsubstitute,stubbing,argument-matching,C#,Unit Testing,Nsubstitute,Stubbing,Argument Matching,参考以下示例代码: using NSubstitute; using NUnit.Framework; public class Class1 { } public class Class2 { public void Method(Class1 class1) { } } public class Class3 : Class1 { } [TestFixture] public class ArgAnyTest { [Test] public v

参考以下示例代码:

using NSubstitute;
using NUnit.Framework;

public class Class1
{
}

public class Class2
{
    public void Method(Class1 class1)
    {
    }
}

public class Class3 : Class1
{
}

[TestFixture]
public class ArgAnyTest
{
    [Test]
    public void Test()
    {
        var called = false;
        var class2 = Substitute.For<Class2>();
        class2.When(@this => @this.Method(Arg.Any<Class1>())).Do(invocation => called = true);

        class2.Method(new Class3());

        Assert.That(called, Is.EqualTo(true));
    }
}
使用NSubstitute;
使用NUnit.Framework;
公共班级1
{
}
公共课2
{
公共作废法(1类)
{
}
}
公开课三级:一级
{
}
[测试夹具]
公共类ArgAnyTest
{
[测试]
公开无效测试()
{
var=false;
var class2=替换为();
class2.When(@this=>@this.Method(Arg.Any())).Do(invocation=>called=true);
class2.方法(新的Class3());
Assert.That(称为,Is.EqualTo(true));
}
}

断言失败,表明
方法
存根不匹配。我是否误解了文档页面,该页面声称
Arg.Any
可用于“匹配特定子类型的任何参数”

问题似乎不在于参数匹配,而在于存根<代码>方法必须是虚拟的,否则不会被存根:

public class Class2
{
    virtual public void Method(Class1 class1)
    {
    }
}