|
Модераторы: LSD |
|
nmn |
|
|||
Опытный Профиль Группа: Участник Сообщений: 593 Регистрация: 26.11.2005 Репутация: нет Всего: 1 |
Здравствуйте
Есть некий класс у которого присутствуют методы с аннотациями. Эти аннотации используются в рантайме и определяют поведение класса. Столкнулся со следующей проблемой, easymock при создании мока класса не учитывает аннотации у методов, в новом динамически созданном классе присутствуют необходимые методы, но отсутствуют у них аннотации. В связи с этим ничего не работает :(
посоветовали мне использовать mockito, мол крутой фреймворк. Там действительно аннтоации сохраняются в новом созданном классе моке. Но вылезла противная проблема: мокито не сохраняет копии переданных аргументов, а только ссылки на них. Это очень ужасно, потому что в отличии от изимоков верификация вызвовов происходит _после_ выполнения тестируемого кода, а за это время аргументы меняются и как результат тестируемый класс отрабатывает правильно, но верификация не проходит. Вот тут обсуждение этой проблемы: http://code.google.com/p/mockito/issues/detail?id=126 , как то она зависла. Я сейчас в растерянности, не вижу способа заставить изимоки сохранять аннотации. А используя мокито не хочется городить дополнительный код для ручного сохранения изменяемый параметров, да и не всегда это возможно (например если метод final). Спаситееее |
|||
|
||||
Старовъръ |
|
|||
Опытный Профиль Группа: Участник Сообщений: 491 Регистрация: 8.5.2008 Репутация: 2 Всего: 10 |
Cудя по тому, что запосчено по той ссылке, твой тест тестирует сразу несколько методов, что не очень правильно. Один тест должен концентрироваться на выполнении одного метода, если он и дергает другие, то только для подготовки SUT. Если ты отрефакторишь тест именно так, то проблемы с List'ом исчезнут.
-------------------- |
|||
|
||||
nmn |
|
||||
Опытный Профиль Группа: Участник Сообщений: 593 Регистрация: 26.11.2005 Репутация: нет Всего: 1 |
То не мой тест. То иллюстрация проблемы с аргументами в мокито. Подробнее расскажу что происходит
Мне надо протестировать как вызывается мой аннотированный метод, какие параметры передавались при вызове этого метода. Да другие методы тоже вызываются, но они как бы вне поле зрения и не интересуют меня. фактически я тестирую Descendant, создаю в нем несколько методов и проверяю как они вызываются Добавлено через 12 минут и 56 секунд может нужно вынести каждый @CallMe метод в отдельный класс? Т.е. есть 5 разных условий вызова, каждое нужно протестировать, создается 5 классов наследников от BaseClass и они независимо друг от друга тестируются |
||||
|
|||||
Старовъръ |
|
|||
Опытный Профиль Группа: Участник Сообщений: 491 Регистрация: 8.5.2008 Репутация: 2 Всего: 10 |
Ну как ни крути, ты тестирушь слишком много в одном тесте. Тестируй метод в одном тесте, а обработку самой аннотации - в другом тесте.
То, что Мокито не клонирует объекты - это логично, тогда бы он требовал, чтоб передаваемые объекты реализовывали Clonneable или что-то вроде того. -------------------- |
|||
|
||||
nmn |
|
|||
Опытный Профиль Группа: Участник Сообщений: 593 Регистрация: 26.11.2005 Репутация: нет Всего: 1 |
вобщем я выкрутился с использованием дополнительного интерфейса, из которого делается мок при помощи mockito. Этот интерфейс записывает клонированные аргументы методов.
|
|||
|
||||
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Design, Quality, Testing | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |