单元测试之模拟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);
}

posted @ 2014-01-15 13:46  踏歌长行  阅读(334)  评论(0编辑  收藏  举报