Vous pouvez vérifier si la méthode Stub est appelée avec un argument fixe en utilisant la vérification de Mockito, mais lors de l'utilisation de Map, elle sera aléatoire et ne fonctionnera donc pas avec la vérification normale. Validez les arguments en utilisant argThat de ArgumentMatcher.
Maven Ajoutez une dépendance à pom.xml afin que vous puissiez utiliser ArgumentMatcher's argThat.
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
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(Map map) {
List<String> updateList = new ArrayList<>(map.keySet()); //Liste dans un ordre aléatoire
godRepository.update(updateList);
}
}
Créer un test de
import static java.util.Arrays.asList;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.HashMap;
import java.util.Map;
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) //Omettez les paramètres nécessaires, etc.
class GodServiceImplTest {
private GodService godService;
@Mock
private GodRepository godRepository;
@BeforeEach
public void setUp() {
godService = new GodServiceImpl(godRepository); //Injecter le référentiel de Dieu moqueur
}
@Test
void update() {
when(godRepository.update(asList("2a", "3b", "1c", "4d"))).thenReturn(4);
Map<String, String> updateMap = new HashMap<>();
updateMap.put("2a", "1");
updateMap.put("3b", "2");
updateMap.put("1c", "3");
updateMap.put("4d", "4");
godService.update(updateMap);
verify(godRepository).update(asList("2a", "3b", "1c", "4d"));
}
}
Lorsque vous exécutez le test
org.mockito.exceptions.misusing.PotentialStubbingProblem:
Strict stubbing argument mismatch. Please check:
- this invocation of 'update' method:
godRepository.update([4d, 1c, 2a, 3b]);
On dit que l'ordre des arguments est différent.
ArgumentMatcher Par conséquent, l'argument est également vérifié à l'aide de argThat de ArgumentMatcher.
import static java.util.Arrays.asList;
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.HashMap;
import java.util.Map;
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) //Omettez les paramètres nécessaires, etc.
class GodServiceImplTest {
private GodService godService;
@Mock
private GodRepository godRepository;
@BeforeEach
public void setUp() {
godService = new GodServiceImpl(godRepository); //Injecter le référentiel de Dieu moqueur
}
@Test
void update() {
//Si seulement contientAll, même 3 arguments passeront, alors évitez-le avec la taille
when(godRepository.update(argThat(list -> list.size() == 4 &&
list.containsAll(asList("2a", "3b", "1c", "4d"))))).thenReturn(4);
Map<String, String> updateMap = new HashMap<>();
updateMap.put("2a", "1");
updateMap.put("3b", "2");
updateMap.put("1c", "3");
updateMap.put("4d", "4");
godService.update(updateMap);
verify(godRepository).update(argThat(list -> list.size() == 4 &&
list.containsAll(asList("2a", "3b", "1c", "4d"))));
}
}