单元测试插入空记录应该抛出错误

Unit Testing Insert Empty Record Should Throw Error

我是单元测试的新手,我正在尝试测试是否不应将新的 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();
}

当运行你的单元测试时,EmployeeRepository 中的 Context 是一个模拟对象,并且 SaveChanges 方法没有实现。在初始化 EmployeeRepository 时,您应该给它一个实际的 SqlContext 来检查您的约束。然而,这里测试的 class 是 EmployeeRepository 但您似乎正在测试 SqlContext 中的功能。这个测试似乎不属于这里。