![]() |
@Autowired и рефлекшн. Есть у меня класс, пишу под него юнит-тест. У класса есть приватный метод, который я хочу протестировать. Очевидное решение - @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").getDeclaredMethod( "myPrivateMethod", param1.class, param2.class ...); В итоге метод получается, но при попытке его invode получаю java.lang.reflect.InvocationTargetException И вот на этом мысль как-то останавливается. Есть способы получить в autowired-переменной получить исхоодный объект, а не обертку? Или может я не в том направлении думаю и нужно совсем по-другому? |
> но при попытке его invode получаю ну так первым параметром при invoke передавай инстанс обертки - должно сработать только вот зачем тебе здесь autowired, и зачем тестировать приватный метод? не говоря уже о том что из-за того что приватные методы не обрабатываются CGLIB то можно огрести фееричных глюков |
Так и делаю. Не срабатывает. Данный класс зависит от большого количества других автосозданных спрингом классов. А могу я делать автосвязывание без cglib? Понятно, что медленнее, но это же тесты. |
тогда сделай метод хотябы protected ибо > из-за того что приватные методы не обрабатываются CGLIB то можно огрести фееричных глюков причем не важно используешь ты cglib или проксирование - один фиг транзакции lazy бины и многие другие могут не работать |
> тогда сделай метод хотябы protected ибо Не могу. Классы не мои. Просто, у нас после какого-то обновления сломалось сразу много тестов. Вот, смотрю. (Не уверен, что именно этот тест сломался вместе со всеми, может просто его автор был не аккуратен) Да и не спортивно это. Легкий путь. А можно весь этот lazy для теста отключить? |
>Да и не спортивно это. Легкий путь. ну ну >А можно весь этот lazy для теста отключить? а он там есть? там же не ясно что за ошибка и что ее вызвало, надо брать в руки отладчик и смотреть, универсального решения нет |
посмотрел дебагером, метод вызывается (вторым способом), но внутри вызванного метода все автосвязанные поля класса = null. |
Текущее время: 12:04. Часовой пояс GMT +3. |