Почему люди покупают готовую еду и полуфабрикаты? Потому что их не надо долго, муторно и вручную готовить. Сегодня поговорим про полуфабрикаты кода - Live Templates из Intellij IDEA, приветствуем у нас в гостях!
звучат аплодисменты👏🏻, фанфары🎺, крики поклонниц💃🏻
Live template - это короткая аббревиатура которая раскрывается в код любого размера. С большой вероятностью ты уже ими пользуешься. Например, если в классе наберешь
Мы можем подружиться с Live templates и фигачить свои собственные шаблоны что бы избавить себя от скуки, серости и рутины.
Как создать свой Live template:
Settings - Editor - Live Templates - Нажать на плюсик - Live Template
Далее нужно будет заполнить поля (см. картинку поста):
1. Abbreviation - аббревиатура, т.е. шорткат, слово из которого сгенерируется код
2. Template text - код, который получится в результате набора аббревиатуры. Тут можно писать не только фиксированный код, но и приправить его гибкостью - использовать Live Template-переменные и функции. Их полный перечень - вот тут.
3. Define - контекст, в котором будет доступен твой Live template. Например только в Java-классах в методах
Ну и что бы ⚡️⚡️⚡️ зарядить на вдохновение - поделюсь своими шаблонами, которые я использую в работе:
1.
2.
3.
А какие шаблоны используешь ты? Делись в комментах💎
звучат аплодисменты👏🏻, фанфары🎺, крики поклонниц💃🏻
Live template - это короткая аббревиатура которая раскрывается в код любого размера. С большой вероятностью ты уже ими пользуешься. Например, если в классе наберешь
psvm - получишь сгенерированный publis static void main(String[] args). Если в методе наберешь sout и нажмешь tab - получишь System.out.println. Если наберешь .sout в конце своего выражения и нажмешь tab - обернешь выражение в System.out.println. По аналогии, .try - обернет выражение в try-catch блок.Мы можем подружиться с Live templates и фигачить свои собственные шаблоны что бы избавить себя от скуки, серости и рутины.
Как создать свой Live template:
Settings - Editor - Live Templates - Нажать на плюсик - Live Template
Далее нужно будет заполнить поля (см. картинку поста):
1. Abbreviation - аббревиатура, т.е. шорткат, слово из которого сгенерируется код
2. Template text - код, который получится в результате набора аббревиатуры. Тут можно писать не только фиксированный код, но и приправить его гибкостью - использовать Live Template-переменные и функции. Их полный перечень - вот тут.
3. Define - контекст, в котором будет доступен твой Live template. Например только в Java-классах в методах
Ну и что бы ⚡️⚡️⚡️ зарядить на вдохновение - поделюсь своими шаблонами, которые я использую в работе:
1.
stepio.qameta.allure.@Step("$STEP_DESCRIPTION$")
public $CLASS_NAME$ $METHOD_NAME$() {
throw new UnsupportedOperationException("Напиши реализацию шагу!")
return this;
}2.
dp@org.testng.annotations.DataProvider
public Object[][] $PROVIDER_NAME$() {
return new Object[][]{};
}
3.
pvt@org.testng.annotations.Test
public void test() {
}
А какие шаблоны используешь ты? Делись в комментах💎
🔥14👍4❤1
Записал шортс где я рассказываю почему List<String> нельзя положить в List<Object>.
Это новый для меня формат, отгрузи сердечек и огоньков если зашло!
🚛🚛🚛❤️🔥
#java
Это новый для меня формат, отгрузи сердечек и огоньков если зашло!
🚛🚛🚛❤️🔥
#java
YouTube
За что нам всё это?! Java, дженерики и инвариантность
🔥18❤12👍4💯1
Огоньков и сердец было столько, что вот вам второй шортс! Сказать что вдохновили - ничего не сказать😄
Но старый добрый текстовый контент никуда не делся - уже скоро ждите новый пост про Аллюр🗒✍🏻
https://www.youtube.com/shorts/QOmAc4aPnK8
Но старый добрый текстовый контент никуда не делся - уже скоро ждите новый пост про Аллюр🗒✍🏻
https://www.youtube.com/shorts/QOmAc4aPnK8
YouTube
Топ-3 грехов автотестировщика #java #qa #testautomation
3🔥14😁4👍3❤2
Future<Salary> или как декабрьская сказка превращается в январские ужасы😈
Я не знаю как вы, а я вечно скатываюсь в финансовую яму в конце января за счет декабрьского аванса😅 поэтому интересно - я один такой или в нашем лагере легион?
Все кто сейчас на воде, дошираке и котлетах из гречки в ожидании денег - ставим 😢
Все кто родился с финансовым планированием на максималках и чувствует себя огонь - жмем 🔥
Я не знаю как вы, а я вечно скатываюсь в финансовую яму в конце января за счет декабрьского аванса😅 поэтому интересно - я один такой или в нашем лагере легион?
Все кто сейчас на воде, дошираке и котлетах из гречки в ожидании денег - ставим 😢
Все кто родился с финансовым планированием на максималках и чувствует себя огонь - жмем 🔥
😢19🔥16😁6❤2
🦸🏼♂️Тони Старку нужен экзокостюм чтоб бить морды злодеям.
🧑🏼💻Разработчикам нужен JUnit 5 чтоб не превратиться в злодеев и не выхватить лещей от Тони Старка.
Без прелюдий - я снимаю кибер курс по JUnit 5. Это база для написания автотестов. Это будет самый крышесносный курс по JUnit, никакого занудства и уныния, только чистая технострасть и сочная начинка. И тут мне нужна твоя помощь.
Есть два варианта:
🪑 Помочь делом. Хочешь сказать "Кузьмич, я верю в тебя", жахнуть предзаказ курса по вкусной скидке - за3000₽ 1500₽ - и забрать курс первым как только он выйдет? Пиши в личку "ДЕЛО", расскажу подробности и программу.
🪑 Помочь словом. Готов поучаствовать в кастдев созвоне со мной на ~20-30 минут, поделиться пожеланиями по программе и повлиять на курс? Пиши в личку "СЛОВО" и забирай подарок - получасовую консультацию со мной.
И тут и там в накладе не останешься. Один нюанс - предложение доступно сегодня 23 января до 23:45 (просто потому что цифры прикольные).
🧑🏼💻Разработчикам нужен JUnit 5 чтоб не превратиться в злодеев и не выхватить лещей от Тони Старка.
Без прелюдий - я снимаю кибер курс по JUnit 5. Это база для написания автотестов. Это будет самый крышесносный курс по JUnit, никакого занудства и уныния, только чистая технострасть и сочная начинка. И тут мне нужна твоя помощь.
Есть два варианта:
🪑 Помочь делом. Хочешь сказать "Кузьмич, я верю в тебя", жахнуть предзаказ курса по вкусной скидке - за
🪑 Помочь словом. Готов поучаствовать в кастдев созвоне со мной на ~20-30 минут, поделиться пожеланиями по программе и повлиять на курс? Пиши в личку "СЛОВО" и забирай подарок - получасовую консультацию со мной.
И тут и там в накладе не останешься. Один нюанс - предложение доступно сегодня 23 января до 23:45 (просто потому что цифры прикольные).
🔥6👍4😁3🥱1
В Java придумали отдельный котел🔥🍲 для тех, кто хочет с наскоку собрать проект с аллюром - человека ждут семь кругов ада в попытке вспомнить все нужные зависимости и настройки. А заканчивается все отчаянной копипастой из соседнего рабочего проекта.
Я же предлагаю тебе превратить магический ритуал в четкий рецепт из 6 компонентов, разобрав предназначение каждого. Погнали:
1. 📦зависимость TestNG или JUnit 5
Позволяет писать и запускать тесты. С этой библиотекой к нам приходит всесильный @Test и всякие @Before-After. Уже только этого достаточно что бы писать и запускать тесты.
2. 📦зависимость allure-testng или allure-junit5
Сам аллюр, но с двумя разнымивкусами - апельсиновым и яблочным вариантами - для проекта с тестами на JUnit или на TestNG. Эта зависимость принесет с собой все аллюровские аннотации типа @Step, @Attachment, @Epic. А еще с ней начнут генерироваться результаты прогона тестов в папку allure-results. Правда, неполные. И без информации о шагах. И в виде json-данных. И никакого красивого отчета тут не светит.
3. 📦зависимость aspectjweaver
Особенность аллюра - аллюр использует AOP (аспектно ориентированные программирование) для обработки данных из его аннотаций типа @Step, и включения их информации в отчет. Для работы AOP нужен AspectJ, иначе аннотции аллюра не будут работать, а заботливо написанные тобой шаги так и останутся в коде и не попадут в репорт.
4. 🛠плагин maven-surefire-plugin
Этот плагин отвечает за запуск тестов через Maven - именно он работает под капотом команды 'mvn test'. Ранее упомянутый AspectJ должен работать во время выполнения тестов, поэтому плагин surefire надо об этом предупредить - добавить для него конфигурацию:
Не забудь задать в pom.xml значение переменной aspectj.version - должно совпадать с версией зависимости aspectjweaver:
5. 🛠плагин allure-maven
Содержит два самых важных действия для нас, две самых важных команды в плагине:
6. 📄файл allure.properties
этот файл должен лежать в директории test/java/resources - он используется что бы указать аллюру куда должны сгенерироваться сырые json-данные, на базе которых потом можно будет собрать отчет. Содержимое файла выглядит так:
Так что все просто - используем тестовый фреймворк (1) и размечаем наши тесты аллюр аннотациями (2), а что бы аннотации аллюра считывались - дружим между собой aspectj (3) и surefire-плагин (4), после чего с помощью плагина аллюра (5) забираем данные из папки, указанной в файле allure.properties (6) и создаем отчет!
⚠️Лайкай, делись с друзьями и с коллегами! Помогай автору не терять мотивацию😁
А главное залетай в комментарии - какую еще тему хотел бы так разобрать?
Я же предлагаю тебе превратить магический ритуал в четкий рецепт из 6 компонентов, разобрав предназначение каждого. Погнали:
1. 📦зависимость TestNG или JUnit 5
Позволяет писать и запускать тесты. С этой библиотекой к нам приходит всесильный @Test и всякие @Before-After. Уже только этого достаточно что бы писать и запускать тесты.
2. 📦зависимость allure-testng или allure-junit5
Сам аллюр, но с двумя разными
3. 📦зависимость aspectjweaver
Особенность аллюра - аллюр использует AOP (аспектно ориентированные программирование) для обработки данных из его аннотаций типа @Step, и включения их информации в отчет. Для работы AOP нужен AspectJ, иначе аннотции аллюра не будут работать, а заботливо написанные тобой шаги так и останутся в коде и не попадут в репорт.
4. 🛠плагин maven-surefire-plugin
Этот плагин отвечает за запуск тестов через Maven - именно он работает под капотом команды 'mvn test'. Ранее упомянутый AspectJ должен работать во время выполнения тестов, поэтому плагин surefire надо об этом предупредить - добавить для него конфигурацию:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.5.2</version>
<configuration>
<argLine>
-javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
</argLine>
</configuration>
</plugin>
Не забудь задать в pom.xml значение переменной aspectj.version - должно совпадать с версией зависимости aspectjweaver:
<properties>
<aspectj.version>1.9.22.1</aspectj.version>
</properties>
5. 🛠плагин allure-maven
Содержит два самых важных действия для нас, две самых важных команды в плагине:
allure:report - она словно бариста превратит сырые кофейные зерна (json-данные из allure-results) в чашку ароматного эспрессо - папку с html-страницей отчета.allure:serve - подает нам эту чашку, т.е. запускает локальный сервер на котором хостит страницу отчета и открывает ее в браузере.<plugin>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-maven</artifactId>
<version>2.15.2</version>
</plugin>
6. 📄файл allure.properties
этот файл должен лежать в директории test/java/resources - он используется что бы указать аллюру куда должны сгенерироваться сырые json-данные, на базе которых потом можно будет собрать отчет. Содержимое файла выглядит так:
allure.results.directory=target/allure-resultsТак что все просто - используем тестовый фреймворк (1) и размечаем наши тесты аллюр аннотациями (2), а что бы аннотации аллюра считывались - дружим между собой aspectj (3) и surefire-плагин (4), после чего с помощью плагина аллюра (5) забираем данные из папки, указанной в файле allure.properties (6) и создаем отчет!
⚠️Лайкай, делись с друзьями и с коллегами! Помогай автору не терять мотивацию😁
А главное залетай в комментарии - какую еще тему хотел бы так разобрать?
2🔥18👍11❤6😁1
YouTube
Мастер автотестового кунг-фу: «Учись, тестируй, повторяй» | Алиса и тестирование
Новый выпуск подкаста "Tech Podcast". В гостях у Алисы - Александр Кузьмичев, эксперт по автотестированию, он раскрывает тайны образования в сфере IT.
В этом выпуске Александр делится тем, как новички превращаются в профессионалов, чем рискуют преподаватели…
В этом выпуске Александр делится тем, как новички превращаются в профессионалов, чем рискуют преподаватели…
До церемонии Оскар еще месяц, но ожидание можно скрасить вот таким кино (подкастом) со мной😎
На этом подкасте я мастерски складываю буквы в слова, делюсь своим опытом в обучении автоматизации и попутно не забываю дышать. (Цезарь обзавидовался бы такой многозадачности)
Смотрим!
https://www.youtube.com/watch?v=dM_F8OiQNNo
На этом подкасте я мастерски складываю буквы в слова, делюсь своим опытом в обучении автоматизации и попутно не забываю дышать. (Цезарь обзавидовался бы такой многозадачности)
Смотрим!
https://www.youtube.com/watch?v=dM_F8OiQNNo
🔥18👍8❤2
This media is not supported in your browser
VIEW IN TELEGRAM
😁14💯3❤1😢1
🔊Флюэнт спикеры английского, как слышно?
Теперь можно похоливарить про джаву в полный голос - с ИИ.
Вон та штука по ссылке ниже👇🏻👇🏻👇🏻 слышит вашу речь и отвечает как живой собеседник🤖
https://www.sesame.com/research/crossing_the_uncanny_valley_of_voice#demo
Я пообщался 5 минут для того что бы понять что в 90% случаев эта ИИ-собеседница неотличима от кожаного человека.
Как думаете, сколько лет еще будет жива профессия репетитора по английскому?..🥲
Теперь можно похоливарить про джаву в полный голос - с ИИ.
Вон та штука по ссылке ниже👇🏻👇🏻👇🏻 слышит вашу речь и отвечает как живой собеседник🤖
https://www.sesame.com/research/crossing_the_uncanny_valley_of_voice#demo
Я пообщался 5 минут для того что бы понять что в 90% случаев эта ИИ-собеседница неотличима от кожаного человека.
Как думаете, сколько лет еще будет жива профессия репетитора по английскому?..🥲
Sesame
Crossing the uncanny valley of conversational voice
At Sesame, our goal is to achieve “voice presence”—the magical quality that makes spoken interactions feel real, understood, and valued.
😱6🔥5❤1
Ты ещё вручную пишешь
Тогда погнали знакомиться с
Пример 1
❌ДО:
✅ПОСЛЕ:
В первом случае еслиптичка NPE.
В таких случаях
—
Пример 2
❌ДО:
✅ПОСЛЕ:
Меньше кода, больше читаемости - балдежная инвестиция в кодовую базу проекта, ну??
—
Пример 3
❌ДО:
✅ПОСЛЕ:
Все мы любим тернарки, "но как друга" - обычно они усложняют читаемость кода. Objects и здесь забирает пальму первенства - и позволяет задать дефолтное значение, если сама переменная оказалась null.
В общем в нашей ковбойской кобуре теперь появился Objects - он хорош и его надо применять. Жжем огоньки и лепим сердечки если было полезно🔥❤️
Кстати, а какие утилитные классы делают проще твою жизнь?
if (obj != null) и боишься NullPointerException, как кот - пылесоса?😿 Тогда погнали знакомиться с
java.util.Objects — утилитным классом, который спасает от рутинных проверок и делает код чище. Глянем пару примеров:Пример 1
❌ДО:
if (user.getName() != null && user.getName().equals("Феофан")) {
// ...
}✅ПОСЛЕ:
if (Objects.equals(user.getName(), "Феофан")) {
// ...
}В первом случае если
user.getName() окажется null — вылетит В таких случаях
Objects.equals("John", user.getName()) — безопаснее.—
Пример 2
❌ДО:
if (input == null) {
throw new IllegalArgumentException("тыб хоть значение какое положил, собака сутулая");
}✅ПОСЛЕ:
Objects.requireNonNull(input, "тыб хоть значение какое положил, собака сутулая");
Меньше кода, больше читаемости - балдежная инвестиция в кодовую базу проекта, ну??
—
Пример 3
❌ДО:
String name = user != null ? user.toString() : "Unknown";
✅ПОСЛЕ:
String name = Objects.toString(user, "Unknown");
Все мы любим тернарки, "но как друга" - обычно они усложняют читаемость кода. Objects и здесь забирает пальму первенства - и позволяет задать дефолтное значение, если сама переменная оказалась null.
В общем в нашей ковбойской кобуре теперь появился Objects - он хорош и его надо применять. Жжем огоньки и лепим сердечки если было полезно🔥❤️
Кстати, а какие утилитные классы делают проще твою жизнь?
🔥18❤6👍3🙏1
Не опоздай, Java 25 уже здесь.
И наконец-то это не очередной соевый и скучный релиз без значимых изменений - 25ке есть чем удивить и порадовать нас. LTS-версия как никак.
👇 Смотрим нововведения:
1. новичок в пакете java.lang - RandomExcuse
Добавлен вспомогательный класс RandomExcuse для генерации сообщения о причине возникновения исключения:
Примеры сообщений исключения: "Раньше работало", "Это ошибка кэшей", "Jenkins-агент тупит".
2. Ключевое слово bless
Позволяет JVM "благословить" переменную — она больше не сможет принимать null-значение, а объект внутри нее не сможет выбрасывать исключения при вызове методов. Пример использования:
3. @LegacyCode
Новая аннотация
4. Модуль ИИ в JVM и конструкция please {}
Крик отчаяния! Для борьбы с выгоранием разработчиков и для упрощения написание кода - синтаксически некорректный фрагмент достаточно обернуть в конструкцию please {}.
На этапе компиляции JVM AI:
- автоматически дополнит и починит код
- выведет мотивирующую цитату
- включит случайный lo-fi плейлист
- закажет горячий какао для разработчика в сервисе доставки его региона
А что из фичей вы хотите в следующем релизе? Я соберу ваши хотелки из комментов и лично напишу в Оракл открытое письмо с предложениями😄
И наконец-то это не очередной соевый и скучный релиз без значимых изменений - 25ке есть чем удивить и порадовать нас. LTS-версия как никак.
👇 Смотрим нововведения:
1. новичок в пакете java.lang - RandomExcuse
Добавлен вспомогательный класс RandomExcuse для генерации сообщения о причине возникновения исключения:
throw new RuntimeException(new RandomExcuse());
Примеры сообщений исключения: "Раньше работало", "Это ошибка кэшей", "Jenkins-агент тупит".
2. Ключевое слово bless
Позволяет JVM "благословить" переменную — она больше не сможет принимать null-значение, а объект внутри нее не сможет выбрасывать исключения при вызове методов. Пример использования:
bless databaseConnection;
3. @LegacyCode
Новая аннотация
@LegacyCode над классом добавляет легкую сериализацию кода этого класса в PDF-формат для монохромной печати листинга кода на бересте или листках пергамента.4. Модуль ИИ в JVM и конструкция please {}
Крик отчаяния! Для борьбы с выгоранием разработчиков и для упрощения написание кода - синтаксически некорректный фрагмент достаточно обернуть в конструкцию please {}.
//До JVM AI:
please {
int x equals "10"
}
//После JVM AI:
int x = 10;
System.out.println("Ты отличный разработчик. Я горжусь тобой.");
На этапе компиляции JVM AI:
- автоматически дополнит и починит код
- выведет мотивирующую цитату
- включит случайный lo-fi плейлист
- закажет горячий какао для разработчика в сервисе доставки его региона
А что из фичей вы хотите в следующем релизе? Я соберу ваши хотелки из комментов и лично напишу в Оракл открытое письмо с предложениями
Please open Telegram to view this post
VIEW IN TELEGRAM
😁14🔥4🤯2❤1👍1
в рабочую субботу законодательно запрещены посты на серьезные темы.
поэтому вот вам веселый подгон - https://neal.fun/password-game/
спорим что вы не сможете создать себе пароль на этом сайте по всем правилам?😁
поэтому вот вам веселый подгон - https://neal.fun/password-game/
спорим что вы не сможете создать себе пароль на этом сайте по всем правилам?
Please open Telegram to view this post
VIEW IN TELEGRAM
😁7❤1🤯1
3 из 25 - это не про лото и не про биатлон.
Для тех кто пропустил релиз Java 25 - смотрим топ-3 новых синтаксических фичи:
1. короткий мейн и класс IO
Это буквально весь код который надо будет написать в файле Example.java для простого hello-world приложения.
Т.е.:
- не надо объявлять класс
- вместо
2. гибкие конструкторы с возможностью вызова кода до super()/this()
Дергать до super()/this() можно только "безопасные" операции, т.е. те, которые не связаны как-то с родительскими полями/методами/состоянием (все-таки раз
3. примитивы в instanceof и switch
Раньше нельзя было использовать в свиче/инстансоф примитивы, а теперь можно. Удобно что можно передать переменную (как тут value) и пощупать-узнать какая она, вне зависимости от того примитивная или ссылочная, без лишних приседаний.
🔥 - крутяк, тащу в прод
🗿 - спасибо, не впечатлен, живу дальше с родной Java 8
Для тех кто пропустил релиз Java 25 - смотрим топ-3 новых синтаксических фичи:
1. короткий мейн и класс IO
// в файле Example.java
void main() {
IO.println("Привет пацаны");
}
Это буквально весь код который надо будет написать в файле Example.java для простого hello-world приложения.
Т.е.:
- не надо объявлять класс
- вместо
System.out.println можно будет использовать класс IO. sout у нас никто не отнимет, обратная совместимость все-таки, но альтернатива появилась2. гибкие конструкторы с возможностью вызова кода до super()/this()
class TestUser {
private final String login;
TestUser(String login) {
// раньше нельзя было писать код ДО явного super()/this(), как например эту проверку
if (login == null || login.isBlank()) {
throw new IllegalArgumentException("Логин не может быть пустым!");
}
super();
this.login = login;
}
}Дергать до super()/this() можно только "безопасные" операции, т.е. те, которые не связаны как-то с родительскими полями/методами/состоянием (все-таки раз
super еще не был вызван). Какая задача решается этой фичей в примере выше? Представьте что до этой фичи Java вы не могли запихнуть валидацию параметра конструктора ДО вызова всей цепочки конструкторов родительских классов. Но если параметр херня то зачем тратить силы jvm на создание всех родителей? Надо быстрее и дешевле - дать возможность отфутболить исключение сразу. В реал жизни все шире чем валидация аргументов до super(), но это один из кейсов.3. примитивы в instanceof и switch
Object value = 42;
switch (value) {
case int i when i > 100 -> System.out.println("Огромное число: " + i);
case int i -> System.out.println("Обычное число: " + i);
case String s -> System.out.println("Это строка: " + s);
default -> System.out.println("Хрен пойми что: " + value);
}
Раньше нельзя было использовать в свиче/инстансоф примитивы, а теперь можно. Удобно что можно передать переменную (как тут value) и пощупать-узнать какая она, вне зависимости от того примитивная или ссылочная, без лишних приседаний.
🔥 - крутяк, тащу в прод
🗿 - спасибо, не впечатлен, живу дальше с родной Java 8
🔥11🗿2