Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用数组参数模拟设置_C#_Unit Testing_Mocking - Fatal编程技术网

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(',')
返回对result
string[]
和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(',')));