#.net #multithreading #nhibernate #xunit.net #xunit
#.net #многопоточность #nhibernate #xunit.net #xunit
Вопрос:
Я пытаюсь написать тестовый пример, используя xUnit.net и атрибута автозапуска, предоставляемого расширениями xunit.
Мой тестовый пример выглядит следующим образом
[Fact, AutoRollback]<br>
public void TestCase()<br>
{
// insert into data table
repository.Insert(data);
// spawn a new thread and read data which you just inserted in the data table
Task.Factory.StartNew(action_to_read_data);
}
Этот тестовый пример завершается с ошибкой и выдает исключение тайм-аута соединения при чтении данных в новом потоке. Проблема, которую я обнаружил, заключается в том, что тестовый пример запускает транзакцию из-за атрибута AutoRollback и при вставке данных блокирует таблицу для отката в конце. Новый поток, созданный тестовым примером, не может прочитать данные из той же таблицы, поскольку он заблокирован родительским потоком. Однако я могу читать данные в том же потоке.
У кого-нибудь есть решение? Я хочу запустить несколько потоков, считывающих данные, вставленные выше.
Комментарии:
1. Я использую nhibernate для вставки / чтения данных.
Ответ №1:
Что я обнаружил на данный момент, так это то, что вы не можете использовать другой поток, который взаимодействует с той же базой данных в вашем модульном тестировании, используя функцию автозапуска. В итоге я удалил этот атрибут из своего тестового примера и сам отслеживал все объекты, вставленные тестовым примером.