Spring-Boot | Тестовый сервис, содержащий вызов метода @ Asyn c - PullRequest
1 голос
/ 28 апреля 2020

Требуется модульное тестирование службы, содержащей вызов метода @ Aysn c, который возвращает объект CompletableFuture. Но будущий объект всегда равен нулю (во время тестирования), вызывая исключение NullPointerException.

future.get () вызывает ошибку

Тестовый код

@RunWith(MockitoJUnitRunner.class)
public class ContainerValidatorTest {

    @Mock
    QueryGenerator queryGenerator;

    @Mock
    SplunkService splunkService;

    @InjectMocks
    private ContainerValidatorImpl containerValidatorImpl;

    @Test
    public void validateContainerTestWithNullData(){
        CacheItemId cacheItemId = null;
        String container = null;
        assertFalse(containerValidatorImpl.validateContainer(cacheItemId,container));
    }
}

Сервисный код

@Override
    public boolean validateContainer(CacheItemId cacheItemId, String container) {
        Query query = queryGenerator.getUserDetailsFromCacheInfoQuery(cacheItemId);
        String response;
        try {
            CompletableFuture<String> future = splunkService.doExecuteQuery(query);
            response = future.get();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("Error While Fetching User Details : "+ e.getLocalizedMessage());
        }
        System.out.println(response);
        JsonArray jsonArray = new JsonParser().parse(response).getAsJsonArray();
        if(!jsonArray.isJsonNull()) {
            return jsonArray.get(0).getAsJsonObject().get("TAG").getAsString().equalsIgnoreCase(container);
        }
        throw new RuntimeException("Not Able to Find UserDetails");
    }

1 Ответ

1 голос
/ 29 апреля 2020
  • Вы не установили никаких ожиданий для splunkService mock.
  • Затем вы вызываете doExecuteQuery для ложного экземпляра
  • Без ожидания вызова метода, Mockito возвращает значение по умолчанию для метода, возвращаемого типом (null для объектов)

Чтобы исправить, запишите свои ожидания с помощью when и thenReturn

Обновление

@Test
public void validateContainerTestWithNullData(){
    CacheItemId cacheItemId = null;
    String container = null;
    when(splunkService.doExecuteQuery(any())).thenReturn(CompletableFuture.completedFuture("completedVal"));
    assertFalse(containerValidatorImpl.validateContainer(cacheItemId,container));
}
...