Я пытаюсь сделать несколько интеграционных тестов, включающих процедуру слияния SQL через Entity Framework.У меня есть модульный тест C # с этим в testinitialize:
[TestInitialize()]
public void MyTestInitialize() {
if (Database.Exists("DefaultConnection"))
{
Database.Delete("DefaultConnection");
}
var people = new Person[]
{
new Person()
{
createDate=new DateTime(2005,01,01),
dob=new DateTime(1995,12,25).ToString("M/d/yyyy"),
firstname="Benjamin",
lastname="Jacobs"
},
new Person()
{
createDate=new DateTime(2018,05,13),
dob=new DateTime(2003,12,25).ToString("M/d/yyyy"),
firstname="Kenneth",
lastname="Cobb"
},
new Person()
{
createDate=new DateTime(2018,05,13),
dob=new DateTime(2003,12,25).ToString("M/d/yyyy"),
firstname="Ismael",
lastname="Glover"
}
};
using(MyContext db=new MyContext()){
db.People.AddRange(people);
db.SaveChanges();
}
}
И затем у меня есть несколько методов тестирования, которые тестируют слияние нескольких различных типов данных.Я хочу начать с чистой тестовой базы данных, как указано выше.Когда я запускаю каждый тест в отдельности, все проходит.Проблема в том, что когда я запускаю все тесты, проходит только первый, а все последующие выдают ошибку.
Это сообщение об ошибке (слегка отредактированное для удаления идентифицируемой информации):
Метод инициализации MergePeopleTest.MyTestInitialize бросил исключение.System.Data.Entity.Core.EntityException: System.Data.Entity.Core.EntityException: базовый поставщик не удалось открыть.---> System.Data.SqlClient.SqlException: Невозможно открыть базу данных "MyDatabase", запрошенную при входе в систему.Ошибка входаНе удалось войти в систему для пользователя '[windows user]' ..
Удаление и воссоздание базы данных, вероятно, не лучший подход (я готов услышать лучшие идеи), но, похоже, это должно работать.Я делал это раньше, и у меня не было этой проблемы.
Редактировать: ошибка возникает во втором тесте во время TestInitialize
в строке, где он пытается db.SaveChanges();
.Насколько я могу судить, база данных была удалена, но затем она автоматически не воссоздала способ, которым EF должен выполнять код вначале.