单元测试:REST服务以及数据层,服务层和模型?

问题描述:

我想知道是否有人可以帮忙,我有一个项目,我已经非常积极地分为不同的层次。单元测试:REST服务以及数据层,服务层和模型?

我有

REST服务(asp.net网页API) 服务层 数据层 滤波器(上数据层的顶部的扩展方法) 一些模型和单独的DTO 的的DbContext

我应该测试什么?

从技术上讲,我的REST服务点在我的服务。所以如果我测试我的REST,我也在测试我的服务。

模型,我不明白我该如何测试这些?

DBContext,是否需要测试这些?

如果我测试我的服务我测试我的数据层

我真的很感激任何反馈

一个很好的经验法则是任何包含业务逻辑的应该能够被单元测试。理想情况下,所有的图层都会被接口分开,您应该能够将模拟的接口注入到各个图层中。任何访问外部组件(磁盘,数据库,网络等)的东西也应该被抽象出来。例如,在数据层中,负责打开与数据库的连接,运行SQL语句以及关闭连接的代码应该被抽象出来。然后你可以模拟数据访问接口和你想测试的代码,可以被测试。在这个例子中数据访问层方法嘲笑

var mockAdapter = new Mock<IDataAdapter>(); 
var repo = new Mock<RepositoryObject> (mockAdapter.Object) { CallBase = true }; 

var param = new Mock<IDbDataParameter>(); 
param.Setup(mock => mock.Value).Returns("TEST RESPONSE"); 

var bindParam = new DynamicParameters.ParamInfo { Name = "strResponse", AttachedParam = param.Object }; 
var paramList = new DynamicParameters(); 
paramList.Parameters.Add("strResponse", bindParam); 

repo.Setup(mock => mock.GetParameters(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<int>(), It.IsAny<string>())).Returns(paramList); 

string actual = repo.Object.ExecuteSomeSqlStatement(string.Empty, string.Empty, int.MinValue, string.Empty); 

Assert.AreEqual("TEST RESPONSE", actual); 

至于你的模型,如果它们只包含的属性然后在测试他们也是没有用处的。

有些情况下,单元测试没有意义,比如创建一个打开侦听点的TCP服务器。希望这些是少之又少的。

+0

谢谢,就是我在找的东西。 – Martin

尝试测试数据层,同样把别人当嘲笑REST服务层。

只有在单元测试中应该测试逻辑,与其他系统或计算机交互的代码不应该包含在单元测试范围内(如网络IO,DB访问,磁盘IO,调用其他系统的接口等)