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.