?

Log in

No account? Create an account
Запуск всех тестов без составления поимённого списка - В Северном Ледовитом
April 1st, 2014
17:52

[Link]

Previous Entry Share Next Entry
Запуск всех тестов без составления поимённого списка
У меня есть модуль-тесты, которые запускаются из-под maven'а на сервере continuous integration, и из-под Eclips'а во время разработки. Я запускаю их постоянно, чтобы убедиться, что ничего не сломал, добавляя новые функции или изменяя старые. Каждому изменению в коде предшествует написание соответствующего теста, а затем запускаются все тесты, чтобы исключить побочные действия. На данный момент у меня 106 тестов, и это только самое начало (полторы недели работы над проектом).

Проблема такая: Eclipse запускает тесты через TestSuite, в котором перечислены все тестовые классы. Уже сейчас я испытываю от этого неудобство, а когда классов будут сотни, а тестов тысячи, добавление каждого нового класса в список будет отнимать много лишнего времени.

Maven умеет запускать тесты по имени класса, т.е. он запускает все классы, имя которых содержит подстроку "Test". (В данный момент я заставил его тоже пользоваться TestSuit'ом, чтобы унифицировать два процесса.)

Я вижу два выхода: научить Eclipse запускать тесты без поимённого перечисления, как Maven; или прямо запускать Maven из Eclips'а, что можно делать и сейчас, но в этом случае Eclipse не видит результатов тестирования. Значит нужно научить Eclipse распознавать результаты тестов из-под Maven'а.

Таким образом, всё сводится к поиску решения одной из двух задач: научить Eclipse одному или другому.

Ага. По варианту № 1 решение найдено тут: http://stackoverflow.com/questions/2255046/run-all-tests-in-junit-4

Как ни странно,— в ответе, набравшем самое небольшое число баллов. Там говорится, что в последних версиях Eclips'а в окошке Run Configurations есть возможность указать вместо TestSuit'а проект, папку или package, из которого запускать все имеющиеся тесты. И это прекрасно работает. (Только нужно предварительно удалить TestSuite, Потому что иначе Eclipse пытается запустить и его, и зацикливается.)

Возникает следующая проблема. Мои тесты делятся на две группы: GUI-тесты и модельные тесты. Почти всегда я хочу запускать только модельные тесты, поскольку меня интересует быстрая автоматическая проверка. Кроме того, покрытие кода тестами меня тоже интересует только для модельных тестов. В данный момент тесты обеих групп расположены вперемешку, поскольку они отсортированы по packag'ам, которые тестируют. Это важно, поскольку в тестируемых классах оставлены методы с default-доступом, специально для тестирования, и вызвать их может только класс, находящийся в таком же package.

Эту же проблему после удаления TestSuit'ов следует решить и в Maven'е: нужно, чтоб модельные и GUI-тесты запускались раздельно.

Думаю, в Maven'е проблему решить просто: нужно исключить из запуска все тесты, в названии класса которых содержится подстрока "GUITest". А вот в Eclipse такой возможности, кажется, нет. Для Eclips'а проще всего было бы создать для GUI-тестов отдельную папку. Но это будет означать, что эту папку придётся отдельно прописывать для Maven'а, поскольку по стандарту он понимает только две папки. Впрочем, в любом случае нужно прописывать отдельный target для запуска GUI-тестов, поскольку хоть редко, но их всё-равно нужно запускать.

Похоже в стандартной схеме проекта Maven'а не предусматривается второй папки для тестов (integration testing не в счёт).

Ладно, пока попробую существовать в едином тестовом пространстве. Заодно будет стимул, чтоб улучшить GUI-тесты, раз уж они будут запускаться в общем потоке.

Вот такая картинка с покрытием получается после включения GUI-тестов на последнем билде:

Tags: , , ,

(2 comments | Leave a comment)

Comments
 
[User Picture]
From:kivagant
Date:April 1st, 2014 07:52 pm (UTC)
(Link)
Использую другой стек технологий: phpunit для тестирования. И просто отказался от использования Eclipse в этих целях. Гораздо интереснее запуск в консольном режиме, а для гитхаба есть еще такие плюхи: travis-ci.org
From:ptrue
Date:April 1st, 2014 07:55 pm (UTC)
(Link)
Ага, круто.
Но у меня java, и не веб-проект, поэтому и другой список.
Ну и, разумеется, для запуска в консольном режиме — мейвен.
Powered by LiveJournal.com