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# MOQ:设置一个方法来填充作为参数传递的对象内部的集合_C#_Unit Testing_Moq - Fatal编程技术网

C# MOQ:设置一个方法来填充作为参数传递的对象内部的集合

C# MOQ:设置一个方法来填充作为参数传递的对象内部的集合,c#,unit-testing,moq,C#,Unit Testing,Moq,我有一个名为“CollectionPager”的类,它在类型列表中有一个集合。我有一个“RetrieveList”方法,它将“CollectionPager”作为输入,并在其中填充“List”。此方法不返回任何值 我需要模拟一个调用“RetrieveList”的函数。但是,由于它不返回任何值,因此不考虑输入到Mock中的任何输入,并且此集合(列表)的计数始终为0 有什么可能的解决方法吗 我想在模拟void函数时,您需要使用回调(另请参见)方法来设置一些逻辑 以下是示例测试,演示了使用方法: va

我有一个名为“CollectionPager”的类,它在类型列表中有一个集合。我有一个“RetrieveList”方法,它将“CollectionPager”作为输入,并在其中填充“List”。此方法不返回任何值

我需要模拟一个调用“RetrieveList”的函数。但是,由于它不返回任何值,因此不考虑输入到Mock中的任何输入,并且此集合(列表)的计数始终为0


有什么可能的解决方法吗

我想在模拟void函数时,您需要使用
回调
(另请参见)方法来设置一些逻辑

以下是示例测试,演示了使用方法:

var mock=new mock();
mock.Setup(m=>m.RetrieveList(It.IsAny()))
.Callback(p=>
{
p、 列表。添加(“测试项目1”);
p、 列表。添加(“测试项目2”);
});
var sut=新的其他服务(mock.Object);
sut.SomeMethodToTest();
假设您的类看起来像这样:

公共类集合寻呼机
{
公共收藏寻呼机()
{
列表=新列表();
}
公共列表{get;private set;}
}
公共接口IRetrieveListService
{
无效检索列表(CollectionPager寻呼机);
}
公共类RetrieveListService:IRetrieveListService
{
公共无效检索列表(CollectionPager寻呼机)
{
寻呼机列表添加(“项目1”);
寻呼机列表添加(“项目2”);
}
}
公共服务
{
专用只读IRetrieveListService retrieveListService;
公共其他服务(IRetrieveListService retrieveListService)
{
this.retrieveListService=retrieveListService;
}
公共无效SomeMethodToTest()
{
var collectionPager=新的collectionPager();
retrieveListService.RetrieveList(collectionPager);
//在您的测试集合页面中。项目包含:testItem1、testItem2
}
}

你能发布一些代码吗?你现在的测试怎么样?嗨,谢谢你的回复。忘了提到CollectionPager是一个泛型类。现在,我得到一个错误“无效回调。带参数的方法(ICollectionPager
1)上的安装程序无法调用带参数的回调(CollectionPager
1)。”测试中的行如下所示:mockrepo.Setup(x=>x.GetService().RetrieveList(It.IsAny()).callback(elemap=>elemap.Collection.AddRange(entityCollection.Collection));令人惊叹的。现在明白了。只需要将CollectionPager更改为ICollectionPager。非常感谢你。