先看下面一段代码:
public class DataService : IDataService
{
private readonly IDataRespository _dataRespository;
public DataService(IDataRespository dataRespository)
{
_dataRespository = dataRespository;
}
public int GetCount()
{
var list = _dataRespository.GetList();
return list.Count;
}
}
其中有 GetCount() 方法是为获取列表的 Count,我们为这个方法写单元测试代码;GetCount() 中获取列表是调用了 IDataRespository 中的 GetList() 方法,此方法中的具体实现、返回的数据量我们都一无所知,所以为了测试 GetCount() 逻辑的正确性,必须对 GetList() 方法进行模拟。
1. 项目中引入Moq.dll
2. 具体如下
[Fact]
public void TestGetList()
{
// 为 IDataRespository 创建模拟对象
var mockDataRespository = new Mock<IDataRespository>();
// 设置模拟对象的 GetList() 方法并设置返回值
mockDataRespository.Setup(p => p.GetList()).Returns(() =>
{
var list = new List<DataModel> {new DataModel()};
return list;
});
IDataService dataService = new DataService(mockDataRespository.Object);
var actual = dataService.GetCount();
const int expect = 1;
Assert.Equal(expect, actual);
}