Asp.net mvc 3 实体框架、通用存储库和单元测试
我解决了我的问题,但不确定为什么事情会这样,我问,因为我总是想知道为什么事情会这样 好的,我正在开发一个MVC 3应用程序,我使用一个通用存储库,unity用于DI,moq用于单元测试。在我编辑项目的单元测试中,我的控制器最初有以下功能: AnEntityObj=\u anEntityService.GetById(id) 但是,当我的单元测试调用控制器中的编辑(1)时,返回null。当我把读数改为 AnEntityObj=\u anEntityService.GetAll().FirstOrDefault(p=>p.Id==Id) 它正确地返回了模拟项 现在,我很高兴我弄明白了这一点,然而,我仍然在挠头,为什么这对单元测试有效,但是GetById在我运行应用程序时起作用 任何洞察都会非常有用 提前谢谢 以下是模拟数据: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
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 { ... });