单元测试插入空记录应该抛出错误
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 中的功能。这个测试似乎不属于这里。
我是单元测试的新手,我正在尝试测试是否不应将新的 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 中的功能。这个测试似乎不属于这里。