单元测试之模拟Mock
先看下面一段代码:
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); }