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. | |
| Интернет-форум Краснодарского края и Краснодара |