Я тестирую бизнес-логику (в sqlserver db), используя автоматически сгенерированные DbContext и MSTest Framework.DbContext отображает только часть сущностей и используется в основном в контроллерах веб-API-данных.Шаблон тестирования:
protected U2Db Db; //auto-generated DbContext
protected DbContextTransaction CurrentTransaction;
[TestInitialize]
public void BeforeEveryTest(){
Db = new U2Db();
CurrentTransaction =
Db.Database.BeginTransaction(IsolationLevel.ReadCommitted);
}
[TestMethod]
public void Method1() {
var o = new Order() {Tag="Method1"};
Db.Orders.Add(o);
Db.TrySave(); //custom extension. wraps SaveChanges and reports errors if exist
//checks inner db tables, service broker queues etc.
....
}
[TestMethod]
public void Method2() {
var o = new Order() {Tag="Method2"};
Db.Orders.Add(o);
Db.TrySave(); //wraps SaveChanges and reports errors if exist
....
}
[TestCleanup]
public void AfterEveryTest() {
if (Db == null) return;
try
{
if (CurrentTransaction != null)
{
CurrentTransaction.Rollback();
CurrentTransaction.Dispose();
}
}
catch (Exception e) { };
Db.Dispose();
}
Если я запускаю какой-либо тест вручную, он работает как положено.Если я начну запускать серию тестов (последовательно, однопоточных), некоторые из них не пройдут.Что я вижу в Server Profiler, так это то, что транзакции работают должным образом, но при неудачных тестах база данных получает записи, которые использовались в ранее выполненных тестах, что заставляет меня чувствовать, что DbContext на самом деле не является «новым» экземпляром.Что я делаю не так?