【发布时间】:2015-09-24 23:17:54
【问题描述】:
我是单元测试的新手,我正在尝试编写一个测试来验证当我更新我的用户对象时,正确的字段正在被更新。我的单元测试看起来像:
[Test]
public void ShouldUpdateExistingEmployee()
{
var employees = new Employee[]
{
new Employee()
{
EmployeeId = 1,
FirstName = "Johhn",
LastName = "Smiths",
Email = "John.Smith1@Illinois.gov",
IsActive = true
}
};
var mockContext = new Mock<SqlContext>();
mockContext.Setup(e => e.Employees).ReturnsDbSet(employees);
mockContext.Setup(m => m.Employees.Find(It.IsAny<object[]>()))
.Returns<object[]>(
ids => employees.FirstOrDefault(d => d.EmployeeId == (int)ids[0]));
var sut = new EmployeeRepository(mockContext.Object);
var employeeToUpdate = new Employee
{
EmployeeId = 1,
FirstName = "John",
LastName = "Smith",
Email = "John.Smith@Illinois.gov",
IsActive = true
};
sut.Save(employeeToUpdate);
Assert.That(employees.First().FirstName, Is.EqualTo(employeeToUpdate.FirstName));
Assert.That(employees.First().LastName, Is.EqualTo(employeeToUpdate.LastName));
Assert.That(employees.First().Email, Is.EqualTo(employeeToUpdate.Email));
}
我的存储库如下所示:
public void Save(Employee employee)
{
if (employee.EmployeeId > 0)
{
Employee dbEmployee = Context.Employees.Find(employee.EmployeeId);
Context.Entry(dbEmployee).CurrentValues.SetValues(employee);
}
else
{
Context.Employees.Add(employee);
}
Context.SaveChanges();
}
问题是当我在我的存储库中访问 Context.Entry(dbEmployee).CurrentValues.SetValues(employee); 时,我收到以下错误:Member 'CurrentValues' cannot be called for the entity of type 'Employee' because the entity does not exist in the context. To add an entity to the context call the Add or Attach method of DbSet<Employee>.
任何帮助将不胜感激!
【问题讨论】:
标签: c# entity-framework unit-testing nunit moq