Size: a a a

JPoint, Java-конференция

2019 April 23

GK

Gregory Koshelev in JPoint, Java-конференция
Почитал последние 12 часов чатика. Всё очень толсто. Потратил время зря 🙁
источник

AG

Asad Ganiev in JPoint, Java-конференция
Gregory Koshelev
Почитал последние 12 часов чатика. Всё очень толсто. Потратил время зря 🙁
Я сомневаюсь что эти 12 часовые чаты вы прочли целые 12 часов )))) у Вам ушло макс 10 мин.
источник

JL

Jarosław Leonow in JPoint, Java-конференция
Asad Ganiev
Но в итоге они же оба использует рефлексию, так?
Моки используют "каноничный" рефлекшн, а вот прямое обращение к рефлексии - вроде как не канон.
Но, я обращу опять же внимание, по мнению Oracle.
Хотя я по мере сил пытаюсь писать такой код, чтобы его не надо было тестировать PowerMock'ом
источник

AG

Asad Ganiev in JPoint, Java-конференция
Jarosław Leonow
Моки используют "каноничный" рефлекшн, а вот прямое обращение к рефлексии - вроде как не канон.
Но, я обращу опять же внимание, по мнению Oracle.
Хотя я по мере сил пытаюсь писать такой код, чтобы его не надо было тестировать PowerMock'ом
👍
источник

AG

Asad Ganiev in JPoint, Java-конференция
Jarosław Leonow
Моки используют "каноничный" рефлекшн, а вот прямое обращение к рефлексии - вроде как не канон.
Но, я обращу опять же внимание, по мнению Oracle.
Хотя я по мере сил пытаюсь писать такой код, чтобы его не надо было тестировать PowerMock'ом
Как вы тогда utils классы со статическими методами тестируете без PowerMock’a?
источник

JL

Jarosław Leonow in JPoint, Java-конференция
Статические методы не должны использовать контекст, и тогда нет проблем с тестами
Если статические методы используют контекст - они не должны быть статическими, добро пожаловать в бины
источник

AG

Asad Ganiev in JPoint, Java-конференция
Jarosław Leonow
Статические методы не должны использовать контекст, и тогда нет проблем с тестами
Если статические методы используют контекст - они не должны быть статическими, добро пожаловать в бины
а что если этот бин с разным контекстом попадет в loop? то для каждого не создается новый объект?
источник

AG

Asad Ganiev in JPoint, Java-конференция
Ааа он же через метод будет вызывать
источник

JL

Jarosław Leonow in JPoint, Java-конференция
Вот-вот
источник

AG

Asad Ganiev in JPoint, Java-конференция
Jarosław Leonow
Статические методы не должны использовать контекст, и тогда нет проблем с тестами
Если статические методы используют контекст - они не должны быть статическими, добро пожаловать в бины
👍
источник

JL

Jarosław Leonow in JPoint, Java-конференция
Я советую, если ещё не читали, обратить внимание на книгу Мартина Фаулера Enterprise Patterns
источник

AG

Asad Ganiev in JPoint, Java-конференция
Jarosław Leonow
Я советую, если ещё не читали, обратить внимание на книгу Мартина Фаулера Enterprise Patterns
Этого я точно не читал
источник

JL

Jarosław Leonow in JPoint, Java-конференция
Там без приложения к тестированию, но описаны хорошие(имхо) практики структурирования кода
источник

AG

Asad Ganiev in JPoint, Java-конференция
Jarosław Leonow
Статические методы не должны использовать контекст, и тогда нет проблем с тестами
Если статические методы используют контекст - они не должны быть статическими, добро пожаловать в бины
Есть вопрос, почему использование рефлексии в моках плохо, но хорошо при бинах? Ведь бины создаются с помощю рефлексии
источник

JL

Jarosław Leonow in JPoint, Java-конференция
Моки работают с изменением имён/списка методов/полей без каких-либо проблем, нам не надо на каждый чих переписывать ворох тестов
Если есть достаточно времени и прямых рук, можно и руками написать такой рефлекшн, который будет независим от захардкоженных значений, но - зачем? И ещё этот самый рефлекшн тоже надо будет оттестировать ;)
источник

AG

Asad Ganiev in JPoint, Java-конференция
Jarosław Leonow
Моки работают с изменением имён/списка методов/полей без каких-либо проблем, нам не надо на каждый чих переписывать ворох тестов
Если есть достаточно времени и прямых рук, можно и руками написать такой рефлекшн, который будет независим от захардкоженных значений, но - зачем? И ещё этот самый рефлекшн тоже надо будет оттестировать ;)
Насчет моков понятно, я спросил про бинов?
источник

AG

Asad Ganiev in JPoint, Java-конференция
Jarosław Leonow
Моки работают с изменением имён/списка методов/полей без каких-либо проблем, нам не надо на каждый чих переписывать ворох тестов
Если есть достаточно времени и прямых рук, можно и руками написать такой рефлекшн, который будет независим от захардкоженных значений, но - зачем? И ещё этот самый рефлекшн тоже надо будет оттестировать ;)
Я считаю что рефлексия опасная штука для продакшна в рантайме.
Сейчас поясню. Скажем у Вас есть сайт который загружает перед
запускам все его плагины из директории plugins который включен
в classpath, и читают из каждого jar файла Manifest
или другого какого нибудь файла xml, properties, yml etc
про имплементацию Plugin интерфейса и делает вот это:

Class cls = Class.forName("com.example.PluginImpl");
Plugin plugin = (Plugin) cls.newInstance();
plugin.run();

А теперь представьте что в папке plugins попался какой нибудь
jar злоумышленник, который может делать все:

- Создавать .class файлы и загружать их в jar файл
и поставить на папку plugins причем делая ее скрытой

Тут я думаю у программы появятся серъезные security issues

Как вы думаете?
источник

AB

Alexander Buyanov in JPoint, Java-конференция
Что все эти дискуссии делают в чате JPoint? Я понимаю обсуждение докладов, но какие-то абстрактные фантазии - зачем это тут?
источник

AG

Asad Ganiev in JPoint, Java-конференция
Alexander Buyanov
Что все эти дискуссии делают в чате JPoint? Я понимаю обсуждение докладов, но какие-то абстрактные фантазии - зачем это тут?
Новые доклады будут не очень скоро
источник

JL

Jarosław Leonow in JPoint, Java-конференция
Asad Ganiev
Я считаю что рефлексия опасная штука для продакшна в рантайме.
Сейчас поясню. Скажем у Вас есть сайт который загружает перед
запускам все его плагины из директории plugins который включен
в classpath, и читают из каждого jar файла Manifest
или другого какого нибудь файла xml, properties, yml etc
про имплементацию Plugin интерфейса и делает вот это:

Class cls = Class.forName("com.example.PluginImpl");
Plugin plugin = (Plugin) cls.newInstance();
plugin.run();

А теперь представьте что в папке plugins попался какой нибудь
jar злоумышленник, который может делать все:

- Создавать .class файлы и загружать их в jar файл
и поставить на папку plugins причем делая ее скрытой

Тут я думаю у программы появятся серъезные security issues

Как вы думаете?
Пример очень специфический)
И требует, скорее, изменения в архитектуре (или механизма валидации интегрируемых плагинов) :)
источник