/
NikolayVasiljev
/
java-reboot
Обзор
Документация
Войти
/
NikolayVasiljev
/
java-reboot
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
lesson09/src/test/java/WeatherCasheTest.java
113 строк
5 KB
VasiljevNik
Готовый проект
25 июн 2025, 23:58
25 июн 2025, 23:58
5c72f68
Код
Авторство
О чём код?
import static org.mockito.Mockito.*; import static org.junit.jupiter.api.Assertions.*; import com.fasterxml.jackson.core.JsonProcessingException; import org.junit.jupiter.api.Test; import ru.sberbank.jd.lesson09.WeatherCache; import ru.sberbank.jd.lesson09.WeatherInfo; import ru.sberbank.jd.lesson09.WeatherProviderClass; import java.time.LocalDateTime; public class WeatherCasheTest { /** * Позитивный сценарий: Кеш пустой, происходит загрузка новой информации по погоде из интернета. */ @Test public void testLoadNewWeatherWhenCacheEmpty() throws JsonProcessingException { WeatherProviderClass mockProvider = mock(WeatherProviderClass.class); WeatherInfo info = new WeatherInfo.WeatherInfoBuilder() .setCity("Moscow") .setDescription("Sunny") .setTemperature(25.0) .build(); when(mockProvider.get("Moscow")).thenReturn(info); WeatherCache cache = new WeatherCache(mockProvider); WeatherInfo result = cache.getWeatherInfo("Moscow"); assertEquals(info, result); verify(mockProvider, times(2)).get("Moscow"); } /** * Получение актуальной информации по погоде из кеша: Кеш содержит актуальную информацию. Запрос в интернет не должен выполняться */ @Test public void testReturnCachedWeatherIfStillValid() throws JsonProcessingException { WeatherProviderClass mockProvider = mock(WeatherProviderClass.class); WeatherInfo info1 = new WeatherInfo.WeatherInfoBuilder() .setCity("Moscow") .setDescription("Sunny") .setTemperature(25.0) .setGetExpiryTime(LocalDateTime.now().minusSeconds(299)) .build(); WeatherInfo info2 = new WeatherInfo.WeatherInfoBuilder() .setCity("Moscow") .setDescription("Sunny") .setTemperature(25.3) .setGetExpiryTime(LocalDateTime.now()) .build(); when(mockProvider.get("Moscow")).thenReturn(info1).thenReturn(info2); WeatherCache cache = new WeatherCache(mockProvider); // Первый вызов - загрузка cache.getWeatherInfo("Moscow"); // Второй вызов - кеш WeatherInfo result = cache.getWeatherInfo("Moscow"); assertEquals(info1, result); verify(mockProvider, times(3)).get("Moscow"); } /** * Кеш содержит НЕактуальную информацию: происходит загрузка новой информации по погоде из интернета. */ @Test public void testReloadWeatherIfCacheExpired() throws JsonProcessingException { WeatherProviderClass mockProvider = mock(WeatherProviderClass.class); WeatherInfo info1 = new WeatherInfo.WeatherInfoBuilder() .setCity("Moscow") .setDescription("Sunny") .setTemperature(25.0) .setGetExpiryTime(LocalDateTime.now().minusSeconds(301)) .build(); WeatherInfo info2 = new WeatherInfo.WeatherInfoBuilder() .setCity("Moscow") .setDescription("Sunny") .setTemperature(25.3) .setGetExpiryTime(LocalDateTime.now()) .build(); when(mockProvider.get("Moscow")).thenReturn(info1).thenReturn(info2); WeatherCache cache = new WeatherCache(mockProvider); // Первый вызов - загрузка cache.getWeatherInfo("Moscow"); // Второй вызов - кеш WeatherInfo result = cache.getWeatherInfo("Moscow"); assertEquals(info2, result); verify(mockProvider, times(3)).get("Moscow"); } /** *запрос информации по не существующему городу (например, по городу 'qwerty'). * Происходит попытка загрузки информации по несуществующему городу, * которая возвращает null. */ @Test public void testLoadWeatherForNonExistentCity() throws JsonProcessingException{ WeatherProviderClass mockProvider = mock(WeatherProviderClass.class); when(mockProvider.get("qwerty")).thenReturn(null); WeatherCache cache = new WeatherCache(mockProvider); WeatherInfo result = cache.getWeatherInfo("qwerty"); assertNull(result); verify(mockProvider, times(2)).get("qwerty"); } }