[英]NSubstitute checking complex arguments inside a Received() check
看着这里,我相信我正在尝试做的事情是可能的。 然而,当我相信它应该通过时,我似乎得到了一个失败的测试。
这是我的测试代码:
// 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
,并将其与实例调用dbOperations两次MyClass2
其中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 方法而不是 ==。 如何比较字符串
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.