Я использую MVC3 EF 4.2 Code First с существующей базой данных, использующей шаблон хранилища.
При использовании EF Code First с существующей базой данных инициализатор в Global.asax Application_Start () не устанавливается, и DbSet сопоставляется с таблицами моей базы данных, удаляя соглашение о множественном числе:
public DbSet<Role> Roles { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
Мой стол называется Роль.
Мой первый тест передает фиктивный репозиторий контроллеру.
[TestMethod]
public void Index_Contains_All_Roles()
{
// Arrange - create the mock repository
Mock<IRoleRepository> mock = new Mock<IRoleRepository>();
mock.Setup(m => m.Roles).Returns(new Role[] {
new Role { Id = 1, Name = "Admin" },
new Role { Id = 2, Name = "Manager" },
new Role { Id = 3, Name = "Examiner" },
new Role { Id = 4, Name = "Examinee" }
}.AsQueryable());
// Arrange - create a controller
RoleController target = new RoleController(mock.Object);
// Action
Role[] result = ((IEnumerable<Role>)target.Index().Model).ToArray();
// Assert
Assert.IsTrue(result.Length == 4);
Assert.AreEqual("Admin", result[0].Name);
Assert.AreEqual("Manager", result[1].Name);
Assert.AreEqual("Examiner", result[2].Name);
Assert.AreEqual("Examinee", result[3].Name);
}
Первый тест пройден.
Второй тест - это интеграционный тест, который проверяет, содержит ли база данных правильные роли.
[TestMethod]
public void Database_Contains_All_Roles()
{
// Arrange - create repository
IRoleRepository roleRepository = new RoleRepository();
// Arrange - create a controller
RoleController target = new RoleController(roleRepository);
// Action
Role[] result = ((IEnumerable<Role>)target.Index().Model).ToArray();
// Assert
Assert.IsTrue(result.Length == 4);
Assert.AreEqual("Admin", result[0].Name);
Assert.AreEqual("Manager", result[1].Name);
Assert.AreEqual("Examiner", result[2].Name);
Assert.AreEqual("Examinee", result[3].Name);
}
Когда я запускаю этот второй тест, я получаю сообщение об ошибке:
The model backing the 'MyDbContext' context has changed since the database was created
Однако при просмотре фактического контроллера в веб-браузере загружаются правильные данные из базы данных.
Чего мне не хватает?