我是单元测试的新手,我正在尝试测试不应将新的Employee
记录插入数据库。当我调用Context.SaveChanges()
时,它不会在单元测试中抛出错误,但是当我在Controller
中尝试它时会抛出一个像预期的错误。
我猜测Employee
实体没有被添加到单元测试的上下文中,所以当我调用SaveChanges()
时,实际上没有保存任何东西?任何帮助将不胜感激!
单元测试
[Test]
[ExpectedException(typeof(DbEntityValidationException))]
public void ShouldNotSaveEmptyEmployee()
{
var mockSet = new Mock<DbSet<Employee>>();
var mockContext = new Mock<SqlContext>();
mockContext.Setup(m => m.Employees).Returns(mockSet.Object);
var sut = new EmployeeRepository(mockContext.Object);
sut.Save(new Employee());
}
存储库:
public void Save(Employee employee)
{
if (employee.EmployeeId > 0)
{
Context.Entry(employee).State = EntityState.Modified;
}
else
{
Context.Employees.Add(employee);
}
Context.SaveChanges();
}
答案 0 :(得分:1)
运行单元测试时,EmployeeRepository中的Context是一个模拟对象,而SaveChanges方法没有实现。在开始使用EmployeeRepository时,您应该为其提供一个实际的SqlContext,其中检查您的约束。但是,此处测试的类是EmployeeRepository,但您似乎正在测试SqlContext中的功能。这个测试似乎不属于这里。