nsubstitute检查接收()检查中的复杂参数



在这里看,我相信我要做的是可能的。但是,当我相信应该通过时,我似乎正在接受一个失败的测试。

这是我的测试代码:

// Arrange
dbOperations = Substitute.For<IDbOperations>();
myClass = new MyClass(dbOperations);
string test = "test string";
// Act
myClass.MyMethod(arg1, arg2, test);
// Assert            
dbOperations.Received(2).TestMethod(Arg.Is<MyClass2>(a => a.MyString == test));

我已经追踪了MyMethod,它用MyClass2的实例调用了Dboperations,其中MyString属性设置为"测试字符串"。我是否在这里误读了这些文档 - 甚至可能与Nsubtitute一起检查过这种检查,如果是,我在做什么错?

这是一个按预期工作的样本(使用NSUB 3.1.0(:

using Xunit;
using NSubstitute;
using System;
public interface IDbOperations {
    void TestMethod(MyClass2 myClass2);
}
public class MyClass2 {
    public String MyString { get; set; }
}
public class MyClass {
    private IDbOperations Ops { get; }
    public MyClass(IDbOperations ops) { Ops = ops; }
    public void MyMethod(object arg1, object arg2, string test) {
        Ops.TestMethod(new MyClass2 { MyString = test });
        Ops.TestMethod(new MyClass2 { MyString = test });
    }
}
public class UnitTest1 {
    [Fact]
    public void StackOverflowQuestion() {
        // Arrange
        var arg1 = "1";
        var arg2 = "2";
        var dbOperations = Substitute.For<IDbOperations>();
        var myClass = new MyClass(dbOperations);
        string test = "test string";
        // Act
        myClass.MyMethod(arg1, arg2, test);
        // Assert            
        dbOperations.Received(2).TestMethod(Arg.Is<MyClass2>(a => a.MyString == test));
    }
}

我发现在这样的情况下创建我要做的事情的新版本并查看它是否有效的情况(如上面的一个(,然后花一些时间查看我的实际代码如何不同从简化的一个。希望应该突出问题在哪里。

比较字符串时,尝试使用equals方法而不是==。操作合作用

最新更新