单元测试插入空记录应该引发错误

时间:2015-09-30 14:05:55

标签: unit-testing nunit moq

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

1 个答案:

答案 0 :(得分:1)

运行单元测试时,EmployeeRepository中的Context是一个模拟对象,而SaveChanges方法没有实现。在开始使用EmployeeRepository时,您应该为其提供一个实际的SqlContext,其中检查您的约束。但是,此处测试的类是EmployeeRepository,但您似乎正在测试SqlContext中的功能。这个测试似乎不属于这里。

相关问题