代码之家  ›  专栏  ›  技术社区  ›  Chry Cheng

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

  •  1
  • Chry Cheng  · 技术社区  · 6 年前

    参考以下示例代码:

    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));
        }
    }
    

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

    1 回复  |  直到 6 年前
        1
  •  2
  •   Chry Cheng    6 年前

    问题似乎不在于参数匹配,而在于存根。 Method 必须是虚拟的,否则不会被存根:

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