У статических методов есть одна мощная, но и в то же время весьма нежелательная особенность: их можно вызвать из любого места в коде, не особо имея возможность регламентировать порядок их вызова. Зачастую такой контроль очень важен, но иногда порядок не имеет очень большого смысла. Например, осуществлять проверки в юнит-тестах часто можно не в очень строгом порядке. И чтобы гарантировать, что в тестируемом юните выполенены все проверки, в Mockito существует всё тот же статический метод verifyNoMoreInteractions(...)
. Иногда можно по ошибке вызвать такой метод ещё до последнего verify(...)
и потом с огорчением наблюдать "красный" тест. Но что если переложить заботу о порядке выполнения проверок на сам компилятор?
Рубрика «java 8» - 4
Рефакторинг последовательных проверок в Mockito с помощью fluent-интерфейсов
2016-09-12 в 10:00, admin, рубрики: fluent interface, java, java 8, mockito, юнит-тестированиеАвтотесты в функциональном стиле
2016-05-19 в 20:19, admin, рубрики: automation testing, functional programming, java, java 8, Тестирование IT-системЭлементы функционального программирования появились в Java сравнительно недавно, но приобретает все большую популярность. Особенно в части stream API – наверное нет Java разработчика, который бы не слышал/читал/применял этот API для работы с коллекциями. К сожалению, большинство и не идет дальше использования Stream API, тогда как функциональный подход позволяет значительно упростить жизнь разработчикам автотестов. Ниже я расскажу про два примера такого упрощения – словари проверок и специализированные матчеры
Обработка строк в Java. Часть I: String, StringBuffer, StringBuilder
2015-06-20 в 19:09, admin, рубрики: java, java 8, string, stringbuffer, stringbuilderВступление
Что вы знаете о обработке строк в Java? Как много этих знаний и насколько они углублены и актуальны? Давайте попробуем вместе со мной разобрать все вопросы, связанные с этой важной, фундаментальной и часто используемой частью языка. Наш маленький гайд будет разбит на пять публикаций, а именно:
- String, StringBuffer, StringBuilder (реализация строк)
- Pattern, Matcher (регулярные выражения)
- i18n (интернационализация)
- Кодировка символов (Unicode, UTF-8)
- Locale, ResourceBundle (локализация)
Реализация строк на Java представлена тремя основными классами: String, StringBuffer, StringBuilder. Давайте поговорим о них.
Читать полностью »
RSA шифрование в PHP (openssl), Android-Java, JavaScript и Go
2015-04-15 в 8:49, admin, рубрики: android, bouncycastle, Go, golang, java, java 8, javascript, jsencrypt, openssl, php, криптография, Разработка под androidRSA — это алгоритм шифрования с открытым ключем. Шифрование с открытым ключем весьма полезная вещь. RSA позволяет создать два ключа: открытый и закрытый. Разместить открытый ключ где-то и им шифровать, а расшифровать сможет только обладатель закрытого ключа.
Например, мы можем сделать веб магазин на ПХП, который будет принимать заказы с данными кредитных карт. Магазин на ПХП будет шифровать данные кредитных карт открытым ключем. Сам пхп-магазин расшифровать эти зашифрованные данные уже не сможет. Хорошее решение, хакер неожиданно так взломает веб магазин (написанный на ПХП), а карты зашифрованы.
Читать полностью »
Введение в топологические пространства. Программирование конечных топологий на Java. Часть 2: База топологии. Непрерывные отображения
2015-01-30 в 6:02, admin, рубрики: java, java 8, математика, Программирование, топологияСписок частей:
- Часть 1: Определение топологии. Открытые и замкнутые множества.
- Часть 2: База топологии. Непрерывные отображения.
Введение
В прошлый раз мы познакомились с основным понятиями теории топологических пространств, а также рассмотрели класс для представления конечных топологических пространств, написанный на языке Java. Сегодня мы двинемся дальше, изучим понятие базы топологии и получим представление о том, дла чего она нужна, а также определим понятие непрерывного отображения топологических пространств. Основной интерес последнее вызывает тем, что в топологическом пространстве отсутствует понятие расстояния между объектами, но тем не менее мы можем описать формальным языком достаточную близкость объектов в терминах… Ну, впрочем, вы это узнаете чуть позже.
Читать полностью »
Wicket+лямбды: типобезопасная и лаконичная реализация IModel
2014-11-26 в 8:37, admin, рубрики: java, java 8, lambda, method reference, Веб-разработкаСтандартная задача при разработке веб-приложения: есть объект данных, требуется эти данные отобразить (вывести в HTML). В Apache Wicket данные для этого привязываются к компонентам (которые и будут заниматься отображением) с помощью моделей (реализующих интерфейс IModel).
Вероятнее всего, эту публикацию будут читать те, кто уже в курсе, но на всякий случай: главный метод из IModel, который нас интересует, это:
T getObject();
Абстракция простая и лаконичная, но не всё так просто на практике. Под катом — сказ о том, как Java 8 помогла победить многословность и небезопасность стандартных подходов.
Читать полностью »
От велосипеда к…
2014-10-29 в 9:46, admin, рубрики: appium, diy или сделай сам, framework, java, java 8, selenium, webdriver, велосипединг, Тестирование IT-системПривет!
Этот небольшой очерк адресован QA – специалистам и в большей степени разработчикам, которые привлечены к автоматизации тестирования вэб и мобильных приложений. Те, кто просто интересуется open source' ом — тоже welcome.
Здесь я хочу развить мысли, высказанные год назад в статье «Про Selenium и один «велосипед»».
План:
1. Основные фичи (краткий обзор)
2. Как развивалось (лирическое отступление)
3. Заключение.
Вы можете сразу ознакомиться с решением. Но если интересно сначала прочитать статью — Читать полностью »
Создание простой программы с RMI и параллельным доступом на графический интерфейс в Java
2014-09-12 в 7:48, admin, рубрики: EventDispatchThread, EventQueue, GUI, java, java 8, lambda, rmi, thread, Программирование, счетчикКогда мне пришлось сильно углубиться в использование RMI, я поняла, какое большое значение играет умение правильно реализовать параллельность в самом графическом интерфейсе программы. На мое удивление в интернете не было достаточно материала на эту тему и особенно качественных примеров, хотя тема для любого программиста несоменно очень важная. Именно поэтому я решила поделиться своим опытом.
Кратко о RMI: программный интерфейс вызова удаленных методов в языке Java (источник). С помощью него можно например управлять данными на программе сервера с одного или множества компьютеров. Подробнее можно почитать на Хабре. Будем исходить из того, что с его основами вы уже знакомы. Необходимо так же иметь представление о нововведениях в Java 8, а именно — вам понадобятся лямбда-выражения. Хорошее объяснение есть здесь.
Читать полностью »
Расширенный материал по Java 8
2014-07-04 в 12:38, admin, рубрики: classloader, generics, java, java 8, Блог компании GolovachCourses, Учебный процесс в ITНе секрет, что многие Java-программисты, начиная свой путь в индустрии, уделяют большое внимание «тяжелым» технологиям — OpenJPA, Spring, JAX-RS, EJB, WS-*,… Это дает возможность как скорее влиться в современные корпоративные проекты, так и максимизировать скорость роста зарплаты.
Многие из них в конце концов «спускаются» до технологий лежащих в основе указанных фреймворков — JDBC, Servlet API, NIO/NIO.2. Однако прискорбно, что зачастую не остается время на детальное изучение самого языка и возможностей платформы.
Речь идет не о тонкостях или экзотике, а о том, что составляет существенную часть работы фреймворка: Servlet-контейнер использует множественные ClassLoader-ы, JPA2-провайдер использует манипулирование байткодом, абсолютное большинство библиотек используют Reflection API, всеобщее использование Generics только «усугубилось» с появлением функциональных интерфейсов (java.lang.function.*) и лямбд.
На недопонимание изначальной платформы (ClassLoader, Reflection API) накладываются «новвоведения» Java 5 (Generics), а теперь еще и Java 8 (методы в интерфейсах, ссылки на методы, лямбды, Stream API, JSR 308: Pluggable Type Systems). Надо обратить внимание на то, что Generics + Java 8 — это не просто языковые фичи, это частично переход к функциональному стилю программирования.
Я собрал определенное количество полезных (на мой взгляд) ссылок по следующим темам
- Методы в интерфейсах, ссылки на методы, множественное наследование
- Лямбды (Project Lambda)
- Stream API
- Функциональные алгоритмы
- Аннотации
- Генерики
- Reflection API
- Загрузка классов
Надеюсь кто-то сочтет их полезными.
Читать полностью »
Новый класс Optional в Java 8, не панацея от NullPointerException
2014-06-09 в 14:01, admin, рубрики: java, java 8, tutorial, метки: java, java 8, tutorial В релизе Java 8 появился новый класс Optional
призванный помочь разработчикам в обработке NullPointerException
.
С NullPointerException
встречались многие и во многих случаях, это очень неприятное исключение заставляет дебажить код, дабы понять, в каком месте, кто-то из твоих предшественников(а возможно и ты), не поставили пресловутую проверку на null
.
А что если вообще запретить назначать тем или иным полям класса значения равные null
? Java естественно не запрещает нам делать этого, но с Optional
это становится немного удобнее и нагляднее.
Итак, приступим к описанию основных возможностей этого нововведения.
Читать полностью »