[JAVA] Mock et tester les classes autowired (MockitoExtension, initMocks)

Au moment de l'UT (test unitaire), vous pouvez utiliser @Mock pour simuler une classe Autowired et décider librement de son comportement. Avec @Mock, vous pouvez vous concentrer sur les cours que vous souhaitez tester, indépendamment du monde extérieur. Vous devez utiliser l'extension Mockito ou initMocks car vous avez besoin d'un sort lorsque vous utilisez @Mock.

Maven Ajoutez une dépendance à pom.xml pour utiliser MockitoExtension.

initMocks

import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor //Dépôt de Dieu à câblage automatique sans utiliser de constructeur
public class GodServiceImpl implements GodService {

  private final GodRepository godRepository; //Final lors de l'utilisation de RequiredArgsConstructor

  @Override
  public void update(List updateList) {
    godRepository.update(updateList);
  }
}

Lors de l'utilisation d'initMocks dans le test de

import static java.util.Arrays.asList;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.MockitoAnnotations.initMocks;

import java.util.List;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;

class GodServiceImplTest {

  @InjectMocks //Classes utilisant la classe Mocked
  private GodServiceImpl godServiceImpl;

  @Mock //Classe que vous voulez moquer
  private GodRepository godRepository;

  @BeforeEach
  public void setUp() {
    initMocks(this); //la magie
  }

  @Test
  void update() {
    List<String> updateList = asList("a", "b", "c", "d");
    when(godRepository.update(updateList)).thenReturn(4);

    godServiceImpl.update(updateList);

    verify(godRepository).update(updateList);
  }
}

Il semble que initMocks initialise l'objet Mock ...

MockitoExtension Avec l'extension Mockito

import static java.util.Arrays.asList;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import java.util.List;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

@ExtendWith(MockitoExtension.class) //la magie
class GodServiceImplTest {

  private GodService godService;

  @Mock //Classe que vous voulez moquer
  private GodRepository godRepository;

  @BeforeEach
  public void setUp() {
    godService = new GodServiceImpl(godRepository); //Injecter le référentiel de Dieu moqueur
  }

  @Test
  void update() {
    List<String> updateList = asList("a", "b", "c", "d");
    when(godRepository.update(updateList)).thenReturn(4);

    godService.update(updateList);

    verify(godRepository).update(updateList);
  }
}

Juste en se moquant, vous ne pouvez pas dire quelle classe vous voulez moquer, vous devez donc la passer comme argument.

MockitoExtension + InjectMocks Vous pouvez également combiner Mockito Extension et Inject Mocks.

import static java.util.Arrays.asList;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import java.util.List;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

@ExtendWith(MockitoExtension.class) //la magie
class GodServiceImplTest {

  @InjectMocks //Classes utilisant la classe Mocked
  private GodServiceImpl godServiceImpl;

  @Mock //Classe que vous voulez moquer
  private GodRepository godRepository;

  @Test
  void update() {
    List<String> updateList = asList("a", "b", "c", "d");
    when(godRepository.update(updateList)).thenReturn(4);

    godServiceImpl.update(updateList);

    verify(godRepository).update(updateList);
  }
}

Vous n'avez plus besoin d'injecter des objets Mock avec Before Each.

Recommended Posts

Mock et tester les classes autowired (MockitoExtension, initMocks)
[Ruby] Classes et instances
Classes HashMap et HashSet
À propos des classes et des instances
Test simulé de Mockito
Classes et instances Ruby
Liste et cours heureux
java (classe et instance)