Java for Beginner
677 subscribers
546 photos
155 videos
12 files
836 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Channel photo updated
This media is not supported in your browser
VIEW IN TELEGRAM
Так и бывает со всеми мечтами 🤪😂

С Новым Годом!
🎄🎁
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Тяжелые будни девопса 🤪😂

С Новым Годом!
🎄🎁
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
А потом айтишники виноваты во всем 🤪😂

С Новым Годом!
🎄🎁
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Иногда так хочется уехать в никуда... 🚘 😆

С Новым Годом!
🎄🎁
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Даже комментариев не надо 😊

С Новым Годом!
🎄🎁
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
И попробуй такому в прибавке откажи 😏 💀

С Новым Годом!
🎄🎁
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Просто ха-ха 😆

С Новым Годом!
🎄🎁
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Ой, спалился🤪😂

С Новым Годом!
🎄🎁
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
HTML язык программирования? Жестко 🤪😂

С Новым Годом!
🎄🎁
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Дебаггер дихлофос😂🤪

С Новым Годом!
🎄🎁
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Ой...😱🤪😂

С Новым Годом!
🎄🎁
Please open Telegram to view this post
VIEW IN TELEGRAM
Channel photo updated
This media is not supported in your browser
VIEW IN TELEGRAM
Кто себя узнал?🤪😂

С Новым Годом!
🎄🎁
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
А платить будут как обычному разрабу😡🧐😂

С Новым Годом!
🎄🎁
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Тестеры, мы Вас уважаем и ценим😂😂😂

С Новым Годом!
🎄🎁
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Ой, как же так?! 😎🤪😂

С Новым Годом!
🎄🎁
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Это мы? 🧐😱🤪😂

С Новым Годом!
🎄🎁
Please open Telegram to view this post
VIEW IN TELEGRAM
Ну что ребят, отдохнули? 😈

Сегодня продолжаем изучение тем по Java! А в воскресение вновь встречаемся)

Пишите в комментариях, если после праздников темы пойдут туго! 😏
Please open Telegram to view this post
VIEW IN TELEGRAM
Аргумент-матчеры и частичное мокирование

Mockito не ограничивается базовыми функциями вроде создания моков или проверки вызовов. Продвинутые возможности библиотеки позволяют обрабатывать сложные сценарии, такие как использование аргумент-матчеров, частичное мокирование и контроль порядка вызовов.

1. Аргумент-матчеры

Аргумент-матчеры позволяют проверять вызовы методов, не завися от конкретных значений параметров. Это полезно, если параметры варьируются или неизвестны заранее.

Использование стандартных матчеров:

any – принимает любое значение:
Mockito.when(mockList.get(anyInt())).thenReturn("Default");
System.out.println(mockList.get(0)); // Выведет: Default
System.out.println(mockList.get(999)); // Выведет: Default


eq – проверяет точное соответствие:

Mockito.when(mockList.get(eq(1))).thenReturn("Specific");
System.out.println(mockList.get(1)); // Выведет: Specific
System.out.println(mockList.get(2)); // Выведет: null


argThat – настраиваемые условия:
Mockito.when(mockList.get(argThat(i -> i % 2 == 0))).thenReturn("Even");
System.out.println(mockList.get(2)); // Выведет: Even
System.out.println(mockList.get(3)); // Выведет: null


2. Частичное мокирование с помощью spy

Иногда требуется протестировать объект, сохранив его реальные методы, но с возможностью переопределения некоторых из них. Для этого используется spy.

Пример использования spy:
List<String> realList = new ArrayList<>();
List<String> spyList = Mockito.spy(realList);

// Переопределяем метод
Mockito.when(spyList.size()).thenReturn(100);

// Реальные методы продолжают работать
spyList.add("Item");
System.out.println(spyList.get(0)); // Выведет: Item
System.out.println(spyList.size()); // Выведет: 100


Важные моменты:

Используйте spy для реальных объектов, если нужна их логика.
Не смешивайте when и doReturn для одного и того же метода у spy (о doReturn поговорим в следующем посте).


Когда использовать эти подходы?

Аргумент-матчеры полезны для методов с динамическими параметрами.
spy – когда объект имеет сложную логику, которую нельзя полностью заменить mock.


Тест с аргумент-матчерами и spy

Допустим, у нас есть сервис:
@Service
public class CalculatorService {
public int add(int a, int b) {
return a + b;
}

public int multiply(int a, int b) {
return a * b;
}
}


Тест с spy:
@ExtendWith(MockitoExtension.class)
public class CalculatorServiceTest {

@Spy
private CalculatorService calculatorService;

@Test
void testPartialMocking() {
// Частично переопределяем метод
Mockito.when(calculatorService.add(anyInt(), eq(0))).thenReturn(0);

// Проверка
Assertions.assertEquals(0, calculatorService.add(10, 0)); // Переопределено
Assertions.assertEquals(30, calculatorService.add(10, 20)); // Реальная логика

// Проверяем другой метод
Assertions.assertEquals(200, calculatorService.multiply(10, 20));
}
}


#Java #Training #Spring #Testing #Mockito #Spy