C# 使用数组参数模拟设置
我对模拟方法存在问题,请参见以下内容: 这是接口C# 使用数组参数模拟设置,c#,unit-testing,mocking,C#,Unit Testing,Mocking,我对模拟方法存在问题,请参见以下内容: 这是接口 public interface IShop { string CheckNames(string[] names); } 这是我的笑话 var names = "A,B,C"; var shopMock = new Mock<IShop>(MockBehavior.Strict); shopMock.Setup(s => s.CheckNames(names.Split(','))).Return
public interface IShop
{
string CheckNames(string[] names);
}
这是我的笑话
var names = "A,B,C";
var shopMock = new Mock<IShop>(MockBehavior.Strict);
shopMock.Setup(s => s.CheckNames(names.Split(','))).Returns("GoodNames");
为了让它工作,我需要
var names = "A,B,C";
var shopMock = new Mock<IShop>(MockBehavior.Strict);
var nameList = names.Split(',');
shopMock.Setup(s => s.CheckNames(nameList)).Returns("GoodNames");
var obj = shopMock.Object;
Assert.AreEqual("GoodNames", obj.CheckNames(names.Split(',')));
var name=“A、B、C”;
var shopMock=new Mock(MockBehavior.Strict);
var nameList=names.Split(',');
shopMock.Setup(s=>s.CheckNames(nameList)).Returns(“GoodNames”);
var obj=shopMock.Object;
Assert.AreEqual(“GoodNames”,obj.CheckNames(names.Split(','));
为什么我需要在这里创建名称列表才能使其正常工作?感谢在第一种情况下,测试似乎会失败,因为两个调用的
名称.Split(',')
返回对resultstring[]
和mock setup和Assert
的不同引用是用不同的对象调用的。在第一种情况下,对于CheckNames
,您应该使用接受任何带有A
、B
、C
值的数组
var name=“A、B、C”;
var shopMock=new Mock(MockBehavior.Strict);
shopMock.Setup(s=>
s、 CheckNames(It.Is(=>q.SequenceEqual(names.Split(',',StringSplitOptions.None')))
.退货(“商品名称”);
var obj=shopMock.Object;
Assert.Equal(“GoodNames”,obj.CheckNames(names.Split(','));
或者对Setup
和Assert
方法使用相同的数组,这似乎是在第二种情况下完成的(但缺少完整示例)
var name=“A、B、C”;
var nameList=names.Split(',');
var shopMock=new Mock(MockBehavior.Strict);
shopMock.Setup(s=>s.CheckNames(nameList)).Returns(“GoodNames”);
var obj=shopMock.Object;
Assert.Equal(“GoodNames”,对象检查名(nameList));
这是第二种情况,也是这样。var name=“A、B、C”;var shopMock=new Mock(MockBehavior.Strict);var list=names.Split(',');shopMock.Setup(s=>s.CheckNames(list)).Returns(“GoodNames”);var obj=shopMock.Object;Assert.AreEqual(“GoodNames”,obj.CheckNames(names.Split(','));不确定它为什么与Assert.AreEqual(“GoodNames”,obj.CheckNames(names.Split(','))一起工作;如果安装程序位于其他阵列上object@Helic您使用的是哪个Moq和.NET版本s=>s.CheckNames(names.Split(','))
将引发一个表达式树,其中可能不包含使用可选参数的调用或调用我的endI中存在错误我正在使用Moq 4.7.99和.net 4.6.2。
var names = "A,B,C";
var shopMock = new Mock<IShop>(MockBehavior.Strict);
var nameList = names.Split(',');
shopMock.Setup(s => s.CheckNames(nameList)).Returns("GoodNames");
var obj = shopMock.Object;
Assert.AreEqual("GoodNames", obj.CheckNames(names.Split(',')));