Использование xUnit.net Автозапуск и многопоточность

#.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:

Что я обнаружил на данный момент, так это то, что вы не можете использовать другой поток, который взаимодействует с той же базой данных в вашем модульном тестировании, используя функцию автозапуска. В итоге я удалил этот атрибут из своего тестового примера и сам отслеживал все объекты, вставленные тестовым примером.