Грамота от Кузьмича – Telegram
Грамота от Кузьмича
214 subscribers
54 photos
1 video
20 links
🍵Java.
🤖Автотестирование.
😆Мемасы.

Я - Александр Кузьмичев. Просто и с юмором рассказываю об IT, а еще веду свою школу "Java + Автотестирование"

Ссылки на все соц. сети:
https://devray.taplink.ws/

TG: @NeonAether
Download Telegram
В детстве ты наверняка собирал вкладыши из жвачки, типа турбо или love is. Или играл в настолки где можно собрать себе колоду карт самых мощных и дерзких персонажей.

Но ура - теперь ты взрослый! Пришло время собрать колоду дерзких паттернов проектирования😄 Ими тоже можно играть, просто временами будет не так весело🥲

Начну серию постов и выложу первую карту - 6♦️ - паттерн Utility-класс.

🛠Utility-класс - это класс который содержит набор статических методов. Создание объектов такого класса запрещено.

🎯Задача такого класса - сгруппировать в кучку методы которые делают что-то общее, например работают с файлами, или парсят строки во что-то более осмысленное, или генерят случайные значения. Одного поля ягоды короче. Такой класс - это типа ящика для инструментов где лежат методы молоток(), гаечный ключ() и пила().

🗒Правила создания Utility-класса:
- private конструктор для невозможности создания объектов класса
- только статические методы
- нет состояния (нестатических полей)
- класс помечен как final
- минимум переменных класса, т.е. static-полей (лучше делать их константами через final)

Либо можно этот талмуд правил заменить одной аннотацией библиотеки lombok - проставить @UtilityClass над классом - и все нужные модификаторы волшебным образом прибегут в твой класс.

Ты стопроц уже сталкивался с такими классами. Их примеры из родного JDK:
java.lang.Math
java.util.Arrays
java.util.Objects
java.nio.file.Files
java.util.Collections

А еще вот эти библиотечные ребята (они следуют _почти_ всем правилам Utility-класса - за исключением отсутствия приватного конструктора):
org.testng.Assert
org.junit.jupiter.api.Assertions
org.assertj.core.api.Assertions


P.S. Кстати, у меня часто было такое что я сначала писал код, а потом узнавал что это оказывается "паттерн"😄 т.е. приходил к правильной структуре кода интуитивно. А ты пользуешься паттерном Utility у себя в коде? Поделись в комментах - что делает твой Utility-класс.

#колода_паттернов #паттерн #java
2👍7🔥41
...и основа пирамиды тестирования :3 :3 :3

#мемасы
4😁52🔥2
UnreachableBrowserException, SessionNotCreatedException, WebDriverException, NoSuchSessionException, TimeoutException...


Каждое из этих исключений приходит так же редко и внезапно, как и спам-письмо с завещанием миллионов долларов от нигерийского принца. Правда в отличии от нигерийского принца этим ребятам нужен не номер и CVC код твоей банковской карты. Им нужны твои нервы и человекодни потраченного времени на отладку и выяснение причин их возникновения.

Я собрал первую версию памятки того, как следует отлаживать такого рода инфраструктурные проблемы. В выполнении UI-автотестов задействовано множество слоев и множество нюансов, поэтому я постарался свести их в цельную картинку. За скобками на этой схеме остается всякая тривиальщина типа неправильных локаторов и ожиданий и NoSuchElementException - с этим исключением я думаю ты прекрасно знаешь как бороться.

Поэтому обязательно пиши в комментах свои мысли, кейсы, дополнения и предложения к этой схемке! А еще лучше - поделись с другом или репостни🔉. Вместе мы соберем самый кайфовый гайд по решению таких проблем🤘🏻 А я с удовольствием доработаю и перерисую эту карту с учетом всех предложений чтобы ты (вот да, именно ты) смог ее припрятать в сохраненках на черный день.

#java #ui #web #автотесты #selenium #selenide
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍8🔥31
В понедельник бывает нелегко.
Поэтому начни день с приятного - ткни случайную картинку и узнай какой ты кот🐈🐈‍⬛

#мемасы
😁104🔥1
📅 12 сентября.
🖥 256й день года.
👨🏼‍💻 День программиста!


Желаю тебе:
health++; //побольше здоровья
happiness++; //побольше счастья
compileAndRuntimeErrors--; //поменьше проблем с кодом


По случаю праздника - JVM и компиляторы свалили на выходной. А тебе оставили подарок🎁. Код-загадка на картинке. Её придется решить без их помощи. Но ведь тебя и твой острый аналитический ум это не остановит?

Голосуй за правильные ответы в опроснике ниже.

#java #quiz
4🔥2👍1
Какими могут быть результаты выполнения этого кода? (возможен один или несколько вариантов)

Ответ будет опубликован позднее в комментах.
Anonymous Poll
13%
про
13%
стр
13%
Результат: null
13%
Ошибка компиляции
6%
StringIndexOutOfBoundsException
48%
Результат: про
3%
null
10%
NullPointerException
45%
Результат: стр
JSON-документы можно встретить при тестировании почти любого слоя приложения - и в юнитах, и в API, и в UI. Их дофига и они вездесущи. Так как же работать с JSON-ами не обжигая руки и пятую точку?🔥 Делюсь парочкой полезных инструментов.

📊 1. Визуализация JSON - JSONCrack
Как увидеть вместо json-простыни на 1000 строк вменяемое и понятное человеческому глазу представление данных, со всеми уровнями вложенности? На странице по ссылке в левой части есть текстовый редактор - вставляем в него свои json-данные. Справа - окошко в котором наслаждаемся результатом и получившейся диаграммой.

Минутка информационной безопасности! Не забывайте что это сторонний сервис и JSON-ы которые вы туда вставляете - лучше предварительно очищать от всяких секретностей, кредов и урлов. От греха подальше.

🏭 2. Конвертер JSON в POJO-класс
Дано: JSON.
Что надо: создать на его основе POJO-класс, модель для данных, со всем тем набором, именами и типами полей что есть у входного JSON. Мы - избалованные Java-бояре и вариант набирать класс ручками выбрасываем, что остается?

Есть сайты где это можно сделать онлайн. В одно поле вставили, нажали кнопку, из другого забрали результат:
Например тут.
Или тут.
А еще есть плагин для идеи если бегать между окнами браузера и идеи не вариант.
После установки плагина в проектном дереве кликаем ПКМ - New - Generate POJO from JSON. В окошке выбираем картошку напитки соусы нужные нам при генерации классов опции.

🛠 3. Генерация JSON-схемы на базе POJO.
Схема - это документ с набором правил для json данных. Схема позволяет быстро провалидировать JSON-документ - соответствует он правилам схемы или нет. В схеме можно описать структуру документа, имена обязательных полей документа, уровни вложенности, типы данных и многое другое. Так вот - есть сайт что бы на лету создать JSON-схему из твоих JSON данных.
Сайт визуально очень похож на приведенные выше - окошко для вставки JSON, волшебная кнопка заставляющая цифровых гномов работать и окошко результата откуда можно забрать сгенеренный документ JSON-схемы.

Если знаешь еще что-то крутое из таких инструментов - шепни на ухо в комментах😉

#java #ui #api #web #автотесты
3🔥81🙏1
Ударим некачественным кодом по психике ревьюеров!💪🏻

#мемасы
😁11🔥3💯2
Интересный факт - стектрейс можно прочитать и сверху вниз и снизу вверх.

🕵🏻Хочешь захватывающий детектив - читай сверху вниз и с каждой главой приближайся к личности убийцы.
😢Хочешь остросюжетную драму и историю крушения в хронологическом порядке - читай снизу вверх и лей слезы, глядя как медленно умирает запущенная программа.

А о том, почему все проблемы от синего - читай на инфографике.

#java #debug #автотесты
3🔥13👍5😁3🤯2
Самый серьезный опросник в мире через 3.. 2.. 1..
😁5
"Был же нормальным аргументом - а превратился в какого-то параметра" - (с) осуждающее общество

Аргументы и параметры. Многие мои знакомые и я сам - иногда в разговоре про код путаем эти два термина. Время навести ясность:

🔴Аргумент - значение, которое передается в метод.
🔵Параметр - переменная, которая определена в сигнатуре метода.

Пример 1.
public Cookie[] getCookies(String brand, int kilograms) {...}

Неправильно:
У этого метода есть два аргумента.
Правильно:
У этого метода есть два параметра.

Пример 2.
String brandName = "Юбилейное";
int weightKg = 120;
Cookie[] cookies = getCookies(brandName, weightKg);

Неправильно:
В метод getCookies были переданы параметры brandName и weightKg.
Правильно:
В метод getCookies были переданы аргументы brandName и weightKg.

Пример 3.
public Cookie[] getCookies(String brand, int kilograms) {
//...
brand = "(" + brand + ")";
//...
}

Неправильно:
В методе getCookies изменяется значение аргумента brand.
Правильно:
В методе getCookies изменяется значение параметра brand.

#java
1🔥17👍4😁2🤯1
🐈‍⬛🐈

#мемасы
😁162💯2👍1😱1