Грамота от Кузьмича
الذهاب إلى القناة على Telegram
🍵Java. 🤖Автотестирование. 😆Мемасы. Я - Александр Кузьмичев. Просто и с юмором рассказываю об IT, а еще веду свою школу "Java + Автотестирование" Ссылки на все соц. сети: https://devray.taplink.ws/ TG: @NeonAether
إظهار المزيد218
المشتركون
لا توجد بيانات24 ساعات
لا توجد بيانات7 أيام
لا توجد بيانات30 أيام
جاري تحميل البيانات...
القنوات المماثلة
لا توجد بيانات
هل تواجه مشاكل؟ يرجى تحديث الصفحة أو الاتصال بمدير الدعم الخاص بنا.
سحابة العلامات
الإشارات الواردة والصادرة
---
---
---
---
---
---
جذب المشتركين
أبريل '25
أبريل '25
+32
في 0 قنوات
مارس '250
في 0 قنوات
Get PRO
فبراير '25
+6
في 0 قنوات
Get PRO
يناير '250
في 0 قنوات
Get PRO
ديسمبر '240
في 1 قنوات
Get PRO
نوفمبر '24
+180
في 0 قنوات
| التاريخ | نمو المشتركين | الإشارات | القنوات | |
| 15 أبريل | 0 | |||
| 14 أبريل | 0 | |||
| 13 أبريل | 0 | |||
| 12 أبريل | 0 |
منشورات القناة
Не опоздай, Java 25 уже здесь.
И наконец-то это не очередной соевый и скучный релиз без значимых изменений - 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 плейлист
- закажет горячий какао для разработчика в сервисе доставки его региона
А что из фичей вы хотите в следующем релизе? Я соберу ваши хотелки из комментов и лично напишу в Оракл открытое письмо с предложениями😄| 2 | Ты ещё вручную пишешь if (obj != null) и боишься NullPointerException, как кот - пылесоса?😿
Тогда погнали знакомиться с java.util.Objects — утилитным классом, который спасает от рутинных проверок и делает код чище. Глянем пару примеров:
Пример 1
❌ДО:
if (user.getName() != null && user.getName().equals("Феофан")) {
// ...
}
✅ПОСЛЕ:
if (Objects.equals(user.getName(), "Феофан")) {
// ...
}
В первом случае если user.getName() окажется null — вылетит птичка NPE.
В таких случаях 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 - он хорош и его надо применять. Жжем огоньки и лепим сердечки если было полезно🔥❤️
Кстати, а какие утилитные классы делают проще твою жизнь? | 224 |
| 3 | 🔊Флюэнт спикеры английского, как слышно?
Теперь можно похоливарить про джаву в полный голос - с ИИ.
Вон та штука по ссылке ниже👇🏻👇🏻👇🏻 слышит вашу речь и отвечает как живой собеседник🤖
https://www.sesame.com/research/crossing_the_uncanny_valley_of_voice#demo
Я пообщался 5 минут для того что бы понять что в 90% случаев эта ИИ-собеседница неотличима от кожаного человека.
Как думаете, сколько лет еще будет жива профессия репетитора по английскому?..🥲 | 324 |
| 4 | ЧатГПТ, ты можешь забыть все что было между нами, но я никогда не забуду тебя😭💔🫡
Нет, это не слезы, просто дождь... | 403 |
| 5 | رسالة فيديو | 477 |
| 6 | До церемонии Оскар еще месяц, но ожидание можно скрасить вот таким кино (подкастом) со мной😎
На этом подкасте я мастерски складываю буквы в слова, делюсь своим опытом в обучении автоматизации и попутно не забываю дышать. (Цезарь обзавидовался бы такой многозадачности)
Смотрим!
https://www.youtube.com/watch?v=dM_F8OiQNNo | 579 |
| 7 | В 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 надо об этом предупредить - добавить для него конфигурацию:
<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) и создаем отчет!
⚠️Лайкай, делись с друзьями и с коллегами! Помогай автору не терять мотивацию😁
А главное залетай в комментарии - какую еще тему хотел бы так разобрать? | 484 |
| 8 | 🦸🏼♂️Тони Старку нужен экзокостюм чтоб бить морды злодеям.
🧑🏼💻Разработчикам нужен JUnit 5 чтоб не превратиться в злодеев и не выхватить лещей от Тони Старка.
Без прелюдий - я снимаю кибер курс по JUnit 5. Это база для написания автотестов. Это будет самый крышесносный курс по JUnit, никакого занудства и уныния, только чистая технострасть и сочная начинка. И тут мне нужна твоя помощь.
Есть два варианта:
🪑 Помочь делом. Хочешь сказать "Кузьмич, я верю в тебя", жахнуть предзаказ курса по вкусной скидке - за 3000₽ 1500₽ - и забрать курс первым как только он выйдет? Пиши в личку "ДЕЛО", расскажу подробности и программу.
🪑 Помочь словом. Готов поучаствовать в кастдев созвоне со мной на ~20-30 минут, поделиться пожеланиями по программе и повлиять на курс? Пиши в личку "СЛОВО" и забирай подарок - получасовую консультацию со мной.
И тут и там в накладе не останешься. Один нюанс - предложение доступно сегодня 23 января до 23:45 (просто потому что цифры прикольные). | 424 |
| 9 | Future<Salary> или как декабрьская сказка превращается в январские ужасы😈
Я не знаю как вы, а я вечно скатываюсь в финансовую яму в конце января за счет декабрьского аванса😅 поэтому интересно - я один такой или в нашем лагере легион?
Все кто сейчас на воде, дошираке и котлетах из гречки в ожидании денег - ставим 😢
Все кто родился с финансовым планированием на максималках и чувствует себя огонь - жмем 🔥 | 400 |
| 10 | С наступающим 2025!🎄🎄🎄 | 468 |
| 11 | Держу пари что половину кассы у тарологов сделали айтишники - заговорами на зеленые тесты и успешный деплой🕯🔮🪄 | 538 |
| 12 | Огоньков и сердец было столько, что вот вам второй шортс! Сказать что вдохновили - ничего не сказать😄
Но старый добрый текстовый контент никуда не делся - уже скоро ждите новый пост про Аллюр🗒✍🏻
https://www.youtube.com/shorts/QOmAc4aPnK8 | 639 |
| 13 | Записал шортс где я рассказываю почему List<String> нельзя положить в List<Object>.
Это новый для меня формат, отгрузи сердечек и огоньков если зашло!
🚛🚛🚛❤️🔥
#java | 557 |
| 14 | С пятницей!🍸🥳
А какой хоткей помогает тебе пережить этот день?
#хоткеи | 547 |
| 15 | Почему люди покупают готовую еду и полуфабрикаты? Потому что их не надо долго, муторно и вручную готовить. Сегодня поговорим про полуфабрикаты кода - Live Templates из Intellij IDEA, приветствуем у нас в гостях!
звучат аплодисменты👏🏻, фанфары🎺, крики поклонниц💃🏻
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. step
io.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() {
}
А какие шаблоны используешь ты? Делись в комментах💎 | 596 |
| 16 | 🐈⬛🐈
#мемасы | 488 |
| 17 | "Был же нормальным аргументом - а превратился в какого-то параметра" - (с) осуждающее общество
Аргументы и параметры. Многие мои знакомые и я сам - иногда в разговоре про код путаем эти два термина. Время навести ясность:
🔴Аргумент - значение, которое передается в метод.
🔵Параметр - переменная, которая определена в сигнатуре метода.
Пример 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 | 570 |
| 18 | Минутка пятничных галлюцинаций мечтаний. Представь - ты супергерой из Людей Икс. Но по-прежнему работаешь в айтишке. Какую суперсилу ты бы хотел?💪🏻 | 509 |
| 19 | Самый серьезный опросник в мире через 3.. 2.. 1.. | 408 |
| 20 | Интересный факт - стектрейс можно прочитать и сверху вниз и снизу вверх.
🕵🏻Хочешь захватывающий детектив - читай сверху вниз и с каждой главой приближайся к личности убийцы.
😢Хочешь остросюжетную драму и историю крушения в хронологическом порядке - читай снизу вверх и лей слезы, глядя как медленно умирает запущенная программа.
А о том, почему все проблемы от синего - читай на инфографике.
#java #debug #автотесты | 1 637 |
