К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

@Autowired и рефлекшн.

0 - 24.07.2017 - 22:22
Есть у меня класс, пишу под него юнит-тест.
У класса есть приватный метод, который я хочу протестировать.
Очевидное решение -
@Autowired
MyClass object;

Method method = object.getClass().getDeclaredMethod(
"myPrivateMethod", param1.class, param2.class ...);

Все бы ничего, но... не работает. Получаю java.lang.NoSuchMethodException.
При этом, я вижу, что эксепшн валится для класса-обертки - MyClass$$EnhancerBySpringCGLIB$$65be72d7


Пробую по-другому.
Method method = Class.forName("com.gmail.dimkrayan.MyClass").getDe claredMethod(
"myPrivateMethod", param1.class, param2.class ...);
В итоге метод получается, но при попытке его invode получаю
java.lang.reflect.InvocationTargetException

И вот на этом мысль как-то останавливается.
Есть способы получить в autowired-переменной получить исхоодный объект, а не обертку? Или может я не в том направлении думаю и нужно совсем по-другому?



1 - 25.07.2017 - 13:31
> но при попытке его invode получаю

ну так первым параметром при invoke передавай инстанс обертки - должно сработать

только вот зачем тебе здесь autowired, и зачем тестировать приватный метод? не говоря уже о том что из-за того что приватные методы не обрабатываются CGLIB то можно огрести фееричных глюков
2 - 25.07.2017 - 17:08
Так и делаю. Не срабатывает.

Данный класс зависит от большого количества других автосозданных спрингом классов.

А могу я делать автосвязывание без cglib? Понятно, что медленнее, но это же тесты.
3 - 25.07.2017 - 18:04
тогда сделай метод хотябы protected ибо

> из-за того что приватные методы не обрабатываются CGLIB то можно огрести фееричных глюков

причем не важно используешь ты cglib или проксирование - один фиг транзакции lazy бины и многие другие могут не работать
4 - 25.07.2017 - 21:26
> тогда сделай метод хотябы protected ибо
Не могу. Классы не мои. Просто, у нас после какого-то обновления сломалось сразу много тестов. Вот, смотрю. (Не уверен, что именно этот тест сломался вместе со всеми, может просто его автор был не аккуратен)
Да и не спортивно это. Легкий путь.

А можно весь этот lazy для теста отключить?
5 - 26.07.2017 - 16:34
>Да и не спортивно это. Легкий путь.

ну ну

>А можно весь этот lazy для теста отключить?

а он там есть? там же не ясно что за ошибка и что ее вызвало, надо брать в руки отладчик и смотреть, универсального решения нет
6 - 26.07.2017 - 19:11
посмотрел дебагером, метод вызывается (вторым способом), но внутри вызванного метода все автосвязанные поля класса = null.


К списку вопросов
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск




Copyright ©, Все права защищены