[英]Unit testing WebAPI with a custom model
我在数据库中有2个表,结构看起来像
学生[身份证,姓名,电子邮件,性别]
测试[Id,StudentId,Name,Status]
UserSummary [ID,名称,电子邮件,性别,TestName,TestStatus]
那么在单元测试方法中,我应该验证哪一种? 数据库模型还是自定义模型?
我的API端点将UserSummary
列表作为JSON返回到前端。
[TestMethod]
public void GetAllStudents()
{
IQueryable<Student> masterdata = new List<Student>
{
new Student {StudentID=1, Firstname = "AAA",Active_InActive=1 },
new Student {StudentID=2, Firstname = "BBB" ,Active_InActive=1 },
new Student {StudentID=3, Firstname = "ZZZ" ,Active_InActive=1 },
}.AsQueryable();
var mockSet = new Mock<DbSet<Student>>();
mockSet.As<IQueryable<Student>>().Setup(m => m.Provider).Returns(masterdata.Provider);
mockSet.As<IQueryable<Student>>().Setup(m => m.Expression).Returns(masterdata.Expression);
mockSet.As<IQueryable<Student>>().Setup(m => m.ElementType).Returns(masterdata.ElementType);
mockSet.As<IQueryable<Student>>().Setup(m => m.GetEnumerator()).Returns(masterdata.GetEnumerator());
var mockContext = new Mock<SchoolDbEntities>();
mockContext.Setup(c => c.Students).Returns(mockSet.Object);
var service = new StudentDbHandler(mockContext.Object);
var students = service.GetStudents(); //it returns list of Student
//So should i test Db models are same or Custom List<UserSummary> models are same?
}
因此,如果必须验证自定义模型,是否还应该从Moq实体框架数据中模拟自定义模型? 有人可以建议任何教程解释直接处理Db模型以外的自定义模型数据的方法吗?
如果您开始测试db模型students
结果,那么您真正要测试的是模拟库确实有效。
您应该测试对GetStudents()
的调用以及它如何与mockContext
交互。 我不知道该方法的内部原理,但我怀疑存在对数据库的调用和验证检查。 您可以针对模拟上下文进行断言,以查看是否按预期调用了它们。
您设置数据,以便检查数据不会进行有效的测试。 您需要测试与代码的交互。
您应该在体系结构中集成一个用于访问数据的层(DAO)。 该层将负责持久化对象和执行查询。
要测试该层,除了对真实的DB(可能是处于内存模式)进行测试,别无选择。 这将使您能够验证映射和查询。
另一层(业务层)应依赖先前的DAO层。 为了测试业务层,您可以为DAO提供模拟。 您可以在没有数据库的情况下测试业务层。
如果可能,请在业务层中将使用DAO的方法与不使用DAO的方法分开。 测试静态方法更容易,该方法将实体作为输入项并在输出中提供实体,有时不需要模拟。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.