Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 我可以对REST服务、数据层、服务层和模型进行单元测试吗?_Entity Framework_Unit Testing_Asp.net Web Api - Fatal编程技术网

Entity framework 我可以对REST服务、数据层、服务层和模型进行单元测试吗?

Entity framework 我可以对REST服务、数据层、服务层和模型进行单元测试吗?,entity-framework,unit-testing,asp.net-web-api,Entity Framework,Unit Testing,Asp.net Web Api,我有一个项目,我已经非常积极地分为不同的层。我有 REST服务(asp.net Web Api) 服务层 数据层 过滤器(数据层顶部的扩展方法) 许多型号和单独的DTO DbContext 我应该做什么单元测试 从技术上讲,我的休息服务点在我的服务。因此,如果我测试我的REST,我也在测试我的服务 模型,我不知道如何测试这些 DBContext,有必要测试这些吗 如果我测试我的服务,我正在测试我的数据层在测试数据层时尝试模拟REST服务层,其他人也一样 单元测试只测试逻辑,与其他系统或计算机

我有一个项目,我已经非常积极地分为不同的层。我有

  • REST服务(asp.net Web Api)
  • 服务层
  • 数据层
  • 过滤器(数据层顶部的扩展方法)
  • 许多型号和单独的DTO
  • DbContext
我应该做什么单元测试

从技术上讲,我的休息服务点在我的服务。因此,如果我测试我的REST,我也在测试我的服务

模型,我不知道如何测试这些

DBContext,有必要测试这些吗


如果我测试我的服务,我正在测试我的数据层

在测试数据层时尝试模拟REST服务层,其他人也一样


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

一个好的经验法则是任何包含业务逻辑的东西都应该能够进行单元测试。理想情况下,您的所有层都将由接口分隔,并且您应该能够将模拟接口注入到各个层中。访问外部组件(磁盘、数据库、网络等)的任何内容也应该抽象掉。例如,在数据层中,负责打开到数据库的连接、运行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);
var mockAdapter=new Mock();
var repo=newmock(mockAdapter.Object){CallBase=true};
var param=new Mock();
参数设置(mock=>mock.Value).返回(“测试响应”);
var bindParam=new DynamicParameters.ParamInfo{Name=“strResponse”,AttachedParam=param.Object};
var paramList=新的DynamicParameters();
paramList.Parameters.Add(“strResponse”,bindParam);
repo.Setup(mock=>mock.GetParameters(It.IsAny(),It.IsAny(),It.IsAny(),It.IsAny()).Returns(paramList);
string actual=repo.Object.ExecuteSomeSqlStatement(string.Empty,string.Empty,int.MinValue,string.Empty);
AreEqual(“测试响应”,实际);
就您的模型而言,如果它们只包含属性,那么测试它们就没有意义了

有些情况下,单元测试毫无意义,例如创建一个TCP服务器打开监听点。希望这些都是少之又少