Использование xUnit.net AutoRollback и многопоточности - PullRequest
3 голосов
/ 09 мая 2011

Я пытаюсь написать тестовый пример, используя xUnit.net и атрибут AutoRollback, предоставляемый расширениями 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 Ответ

1 голос
/ 18 мая 2011

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

...