1

Пытается использовать SQLite для модульного тестирования, который работает нормально, однако тестирование некоторых хранилищ является промотичным, поскольку они используют транзакции.Перехватчик NHibernate для изменения уровня транзакции

Для операций, которые используют ReadCommitted все в порядке, однако некоторые из них используют ReadUncommitted который, взглянув на System.Data.SQLite не поддерживает:

if ((this._defaultIsolation != IsolationLevel.Serializable) && (this._defaultIsolation != IsolationLevel.ReadCommitted)) 
{ 
     throw new NotSupportedException("Invalid Default IsolationLevel specified"); 
}

Я задаюсь вопросом, можно ли перехватите Session.BeginTransaction (...), чтобы я мог изменить уровень транзакции, только для модульных тестов.

Update: Мое решение было загрузить исходный код для System.Data.SQLite и изменить исключения, чтобы установить уровень изоляции по умолчанию. Я Bloggled об этом здесь:

http://www.philliphaydon.com/2011/01/system-data-sqlite-isolationlevel-exception/

ответ

0

Там не простые точки расширения для этого, короткие реализации ITransactionFactory и ITransaction.

Возможно, проще обернуть вызов BeginTransaction, чтобы избежать использования ReadUncommitted при тестировании.

+0

Да, это то, чего я хотел избежать, поскольку это влияет только на модульное тестирование, а не на приложение. То, что я закончил делать прошлой ночью, загружало исходный код для System.Data.SQLite и изменял две проверки, которые он выполняет для уровня изоляции, и менял его на сериализуемый, вместо того, чтобы бросать исключение. – Phill

+0

Мое решение: http://www.philliphaydon.com/2011/01/system-data-sqlite-isolationlevel-exception/ – Phill

+0

Неплохо. Правила OSS :-) –