JUnit Output in Maven reports
От: crypto5 США  
Дата: 07.01.10 23:55
Оценка:
Всем привет,

вот хочу что бы Log4j вывод JUint тестов оказывался у меня в maven репортах выполнения юнит тестов. Может подскажет кто как такое сделать?
In vino veritas!
Re: JUnit Output in Maven reports
От: Other Sam Россия  
Дата: 08.01.10 00:16
Оценка:
> Всем привет,
>
> вот хочу что бы Log4j вывод JUint тестов оказывался у меня в maven
> репортах выполнения юнит тестов. Может подскажет кто как такое сделать?
> In vino veritas!


Не нужно этого делать. Пусть при падении теста будет только сообщение
какой assert не прошел. А все остальное нужно выбрасывать.
Иначе в проекте появляются тесты которые вроде проходят, но нужно
смотреть все ли хорошо у них в логах — а это уже не автоматическое
тестирование.

Если нужны логи — нужно запустить падающий тест в отладчике, дойти до
места падени и смотеть что там происходит.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: JUnit Output in Maven reports
От: crypto5 США  
Дата: 08.01.10 15:26
Оценка:
Здравствуйте, Other Sam, Вы писали:

OS>Не нужно этого делать. Пусть при падении теста будет только сообщение

OS>какой assert не прошел. А все остальное нужно выбрасывать.
OS>Иначе в проекте появляются тесты которые вроде проходят, но нужно
OS>смотреть все ли хорошо у них в логах — а это уже не автоматическое
OS>тестирование.

Ну я же ассерты не убираю? Просто я вижу в этом дополнительное удобство: если что-то отвалилось, есть дополнительная информация в виде логов.
In vino veritas!
Re[3]: JUnit Output in Maven reports
От: Other Sam Россия  
Дата: 08.01.10 22:54
Оценка:
> Здравствуйте, Other Sam, Вы писали:
>
> OS>Не нужно этого делать. Пусть при падении теста будет только сообщение
> OS>какой assert не прошел. А все остальное нужно выбрасывать.
> OS>Иначе в проекте появляются тесты которые вроде проходят, но нужно
> OS>смотреть все ли хорошо у них в логах — а это уже не автоматическое
> OS>тестирование.
>
> Ну я же ассерты не убираю? Просто я вижу в этом дополнительное удобство:
> если что-то отвалилось, есть дополнительная информация в виде логов.

В том-то и дело, что если что-то отвалилось (в по результатам прогона
автоматических тестов), то у вас должно быть:
— Версия исходников (или дата) в репозитарии
— Конкретный тест (класс, метод, ассерт)
— Железная конфигурация тестовой машины.
И все! Больше ничего не должно быть!!!

Дальше разработчик работая над исправлением этого бага должен выполнить
все необходимую работу в полный рост.
— Убедиться, что на другом железе ошибка повторяется (или не повторяется)
— Убедиться, что в последней версии ошибка так и не исправленна
— Отладчиком остановить систему в момент непосредственно перед ошибкой
— Найти неправильное состояние системы -> найти место которое привело
систему в неправильное состояние -> проверить почему то место оказалось
без тестов -> поматерить разработчиков тех мест -> обложить то место
тестами -> отложить исправление изначального бага до тех пор, пока в
"том" месте не начнут проходить все только что написанные тесты.
— Либо найти ошибочный алгоритм, или ошибочное предположение, или
перепутанные значения, или неполные значения в каком-то месте ->
Исправить этот дефект -> прогнать все тесты заново, и убедиться что
другие тесты не попадали -> закомитить изменения.
Posted via RSDN NNTP Server 2.1 beta
Re[4]: JUnit Output in Maven reports
От: Other Sam Россия  
Дата: 08.01.10 22:55
Оценка:
расскажу байку.
В одном проекте у меня был класс который должен был на основе данных в
БД отображать на веб странице некоторые данные. Причем связи/зависимости
были непростыми (роли/группы, узлы/деревья, объединения/группировки).
Разумеется был модульный тест, который на специально веделенном сервере
(использующем специально отведенную БД) проверял работу этого класса. По
данным в базе проверял что появляется на веб страничке. (это не
модульный тест, а скорее интеграционный, но тем не менее это был
автоматический тест).

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

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

Решение: Нужно было добиться, чтобы тесты могли работать опираясь только
на исходный код, и пару сервисов. Т.е. перед каждым тестом созадавать
базу и заполнять эталонными данными, автоматически развертывать веб
приложение. И проверять уже на этой копии приложения.
Как позже оказалось, это довольно просто. Создаем базовый класс для
определенных тестов. Который перед каждым тестом развертывает копию веб
приложения (вплоть до создания базы данных), а после каждого теста
удаляет веб приложение.
class AbcWebAppTestBase {

   // доступ к базе, которуе использует сайт.
   public Connection getDbConnection(){};

   // URL по которому доступен корень веб приложения
   public String getSiteAddresss(){};

   // Файловый путь, по которому можно читать развернутое веб
   // приложение (например чтобы проверять .htaccess)
   public String getSitePath(){};
}
Posted via RSDN NNTP Server 2.1 beta
Re[5]: JUnit Output in Maven reports
От: LeonidV Ниоткуда http://vygovskiy.com
Дата: 09.01.10 12:58
Оценка:
Здравствуйте, Other Sam, Вы писали:

OS>Решение: Нужно было добиться, чтобы тесты могли работать опираясь только

OS>на исходный код, и пару сервисов. Т.е. перед каждым тестом созадавать
OS>базу и заполнять эталонными данными, автоматически развертывать веб
OS>приложение. И проверять уже на этой копии приложения.
OS>Как позже оказалось, это довольно просто. Создаем базовый класс для
OS>определенных тестов. Который перед каждым тестом развертывает копию веб
OS>приложения (вплоть до создания базы данных), а после каждого теста
OS>удаляет веб приложение.
Вы проверяете две части (как минимум) работу DAO (взял из базы, то, что там лежит и так как хотим), и обработку полученных данных.

Первая часть в общем случае уже не модульные тесты. Мы решаем эту проблему заполняя БД (на тестовом сервере/локальном разработчике) данными. При этом эти данные отражены в специальном классе. Ну и затем просто методы DAO проверяем.

Вторая часть должна обязательно тестироваться без привязки к DAO через моки (что проще и правильнее) или специальное тестовое DAO.
http://jvmmemory.com — простой способ настройки JVM
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.