我有一个名为“CollectionPager”的类,其中包含List类型的集合。我有一个方法“RetrieveList”,它以“CollectionPager”作为输入,并在其中填充“List”。此方法不返回任何值。
我需要模拟一个调用“RetrieveList”的函数。但是,由于它没有返回任何值,因此不考虑输入Mock的任何输入,并且此集合(List)的计数总是为0。
有任何可能的解决方法吗?
答案 0 :(得分:3)
我猜你在模拟void函数时需要Callback
(参见Moq quickstart)方法来设置一些逻辑。
以下是演示用法的示例测试:
var mock = new Mock<IRetrieveListService>();
mock.Setup(m => m.RetrieveList(It.IsAny<CollectionPager>()))
.Callback<CollectionPager>(p =>
{
p.List.Add("testItem1");
p.List.Add("testItem2");
});
var sut = new OtherService(mock.Object);
sut.SomeMethodToTest();
假设您的课程类似于以下内容:
public class CollectionPager
{
public CollectionPager()
{
List = new List<string>();
}
public List<string> List { get; private set; }
}
public interface IRetrieveListService
{
void RetrieveList(CollectionPager pager);
}
public class RetrieveListService : IRetrieveListService
{
public void RetrieveList(CollectionPager pager)
{
pager.List.Add("item1");
pager.List.Add("item2");
}
}
public class OtherService
{
private readonly IRetrieveListService retrieveListService;
public OtherService(IRetrieveListService retrieveListService)
{
this.retrieveListService = retrieveListService;
}
public void SomeMethodToTest()
{
var collectionPager = new CollectionPager();
retrieveListService.RetrieveList(collectionPager);
// in your test collectionPager.Item contains: testItem1, testItem2
}
}