Убил почти два дня на дурацкую проблему. У меня есть интеграционные тесты, которые используют некий внешний ресурс. Я был уверен, что он - read-only, но оказалось, что в некоторых случаях я могу менять его состояние. В результате получалось что тесты могут проходить, а могут и нет, в зависимости от того, в какой последовательности их запускать.
Понятно, что в идеале все внешние ресурсы надо инициализировать заново перед каждым тестом. Но в моем случае на инициализацию уходит минут пять, а тестов почти тысяча штук, так что такой вариант не годится.
И мне пришло в голову такое решение: надо, чтобы test runner умел запускать тесты в случайном порядке. Если так два-три раза прогнать все тесты, то можно быть уже более-менее уверенным. Вроде очень простая идея, но я не видел, чтобы кто-то её реализовал...
4 комментария:
Писали уже люди такое, вот например http://www.codewrecks.com/blog/index.php/2008/12/06/randomizer-nunit-addin/, да можно и самому всегда написать подобный плагин.
Еще как вариант схожего подхода - у нас CI-сервер провалившиеся тесты двигает в начало очереди при следующем запуске. Это больше для fail fast, но и помогает для определения есть ли проблемы с неизолированностью тестов.
А что за CI server?
У нас имеется довольно таки простая имплементация ShuffleTestRunner которая запускает тесты в случайном порядке.
Это правда вызывает flaky tests то есть тест работает, но переодически fail. Хотя это лучше чем flaky tests о которых не знаешь.
>А что за CI server?
http://www.jetbrains.com/teamcity/
Отправить комментарий