Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/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
Asp.net mvc 3 实体框架、通用存储库和单元测试_Asp.net Mvc 3_Unit Testing_Repository_Moq - Fatal编程技术网

Asp.net mvc 3 实体框架、通用存储库和单元测试

Asp.net mvc 3 实体框架、通用存储库和单元测试,asp.net-mvc-3,unit-testing,repository,moq,Asp.net Mvc 3,Unit Testing,Repository,Moq,我解决了我的问题,但不确定为什么事情会这样,我问,因为我总是想知道为什么事情会这样 好的,我正在开发一个MVC 3应用程序,我使用一个通用存储库,unity用于DI,moq用于单元测试。在我编辑项目的单元测试中,我的控制器最初有以下功能: AnEntityObj=\u anEntityService.GetById(id) 但是,当我的单元测试调用控制器中的编辑(1)时,返回null。当我把读数改为 AnEntityObj=\u anEntityService.GetAll().FirstOrD

我解决了我的问题,但不确定为什么事情会这样,我问,因为我总是想知道为什么事情会这样

好的,我正在开发一个MVC 3应用程序,我使用一个通用存储库,unity用于DI,moq用于单元测试。在我编辑项目的单元测试中,我的控制器最初有以下功能: AnEntityObj=\u anEntityService.GetById(id)

但是,当我的单元测试调用控制器中的编辑(1)时,返回null。当我把读数改为 AnEntityObj=\u anEntityService.GetAll().FirstOrDefault(p=>p.Id==Id)

它正确地返回了模拟项

现在,我很高兴我弄明白了这一点,然而,我仍然在挠头,为什么这对单元测试有效,但是GetById在我运行应用程序时起作用

任何洞察都会非常有用

提前谢谢

以下是模拟数据:

public class AdministrationMockData
{
    #region Administration Mock Data
    #region County Mock Data
    public static void CreateCounty(ref Mock<ICountyService> mock)
    {
        mock.Setup(m => m.GetAll()).Returns(new List<County> 
        {
    new County { Id = 1, Name = "Adams", StateId = 39, IsActive = true, LastChangedDate = DateTime.Now, LastChangedBy = "dba", AddedDate = DateTime.Now, AddedBy = "dba" },
    new County { Id = 2, Name = "Berks",  StateId = 39, IsActive = true, LastChangedDate = DateTime.Now, LastChangedBy = "dba", AddedDate = DateTime.Now, AddedBy = "dba" },
    new County { Id = 3, Name = "Chester",  StateId = 39, IsActive = true, LastChangedDate = DateTime.Now, LastChangedBy = "dba", AddedDate = DateTime.Now, AddedBy = "dba" },
    new County { Id = 4, Name = "York",  StateId = 39, IsActive = true, LastChangedDate = DateTime.Now, LastChangedBy = "dba", AddedDate = DateTime.Now, AddedBy = "dba" },
    new County { Id = 5, Name = "Baltimore",  StateId = 21, IsActive = true, LastChangedDate = DateTime.Now, LastChangedBy = "dba", AddedDate = DateTime.Now, AddedBy = "dba" },
    new County { Id = 6, Name = "Montgomery",  StateId = 21, IsActive = true, LastChangedDate = DateTime.Now, LastChangedBy = "dba", AddedDate = DateTime.Now, AddedBy = "dba" }
  }.AsQueryable());
    }
    #endregion County Mock Data

    #region State Mock Data
    public static void CreateState(ref Mock<IStateService> mock)
    {
        mock.Setup(m => m.GetAll()).Returns(new List<State> 
        {
    new State { Id = 21, Name = "Maryland", Code = "MD", IsActive = true, LastChangedDate = DateTime.Now, LastChangedBy = "dba", AddedDate = DateTime.Now, AddedBy = "dba" },
    new State { Id = 39, Name = "Pennsylvania",  Code = "PA", IsActive = true, LastChangedDate = DateTime.Now, LastChangedBy = "dba", AddedDate = DateTime.Now, AddedBy = "dba" }        
  }.AsQueryable());
    }
    #endregion State Mock Data
    #endregion Administration Mock Data
}

我有一个通用的存储库和接口存储库,由TEntity为每个特定实体实例化,还有一个执行存储库的服务和接口服务。我的存储库和服务基于:

如果调用
GetById
时从未设置
CountyService
以返回正确的数据,则会得到null。添加以下用于设置模拟的代码,您可以使用
GetById
方法:

mock.Setup(m => m.GetById(1).Returns(new State { Id = 1, ... });
或者将其设置为使用传递给方法的任何参数:

mock.Setup(m => m.GetById(It.IsAny<int>()).Returns(new State { ... });
mock.Setup(m=>m.GetById(It.IsAny())。返回(新状态{…});

我不认为这是解决问题的方法。您正在下载所有项目并在客户端执行过滤,这将影响您的应用程序性能。无论如何,您是否可以共享您在测试中用于配置模拟的代码?如何模拟数据?您是否正确设置了ID?如dmusial所说,代码会很有帮助。太棒了,就是这样。进入单元测试是很重要的。
mock.Setup(m => m.GetById(1).Returns(new State { Id = 1, ... });
mock.Setup(m => m.GetById(It.IsAny<int>()).Returns(new State { ... });