Как вызвать ошибку тестового прогона, если время AssemblyCleanup истекло? - PullRequest
0 голосов
/ 23 февраля 2011

Я использую MSTest в Visual Studio 2010 и мне нужно восстановить базу данных после выполнения всех тестов.

Я украсил метод атрибутом AssemblyCleanupAttribute .

<AssemblyCleanupAttribute()>
Shared Sub AssemblyCleanup()
    ' Restore my databases which takes a long time...
End Sub

Проблема в том, что очистка занимает разумное количество времени, настолько большое, что время ожидания истекло.

Единственная причина, по которой я начал осознавать, что произошел тайм-аут, заключается в том, что в режиме отладки окно вывода сообщает «... QTAgent32.exe, AgentObject: Cleanup: истекло время ожидания при очистке агента.». Следовательно, он очень тихо терпит неудачу, и мне бы очень хотелось, чтобы MSTest сообщал об ошибке тестового прогона.

Каков наилучший способ обнаружить и сообщить о тайм-ауте? Моим идеальным решением было бы сообщить об тайм-ауте как об ошибке запуска теста.

Ответы [ 2 ]

2 голосов
/ 05 апреля 2011

Короче говоря, вы не можете заставить MSTest сообщать об ошибке, если AssemblyCleanup истекает .

Если вы столкнулись с этой проблемой, то на этом этапе вам нужно подумать, не слишком ли велико это ограничение MSTest для вас. Существуют и другие, и, что лучше, тестовые рамки.

Если вы решили придерживаться MSTest и просто хотите, по крайней мере, убедиться, что код / ​​скрипт в AssemblyCleanup запущен до конца, тогда вы можете выбрать либо запустить код очистки как процесс. Таким образом, даже если AssemblyCleanup внутренне вызывает Thread.Abort, тогда ваш процесс запускается до конца. Хотя это грязно ...

0 голосов
/ 23 февраля 2011

Почему бы не обернуть содержимое каждого теста в транзакции и откатить транзакцию в конце теста? Смотрите здесь для получения дополнительной информации: http://msdn.microsoft.com/en-us/library/bb381703(v=vs.80).aspx#dtbunttsttedp_topic7

...