[JAVA] Überprüfen Sie mit Mockito, ob die Methode aufgerufen wurde, als Map → List (wann, verifizieren)

Sie können überprüfen, ob die Stub-Methode mit einem festen Argument aufgerufen wird, indem Sie Mockitos Verifizierung verwenden. Bei Verwendung von Map ist sie jedoch zufällig, sodass sie bei normaler Verifizierung nicht funktioniert. Überprüfen Sie die Argumente mit argThat von ArgumentMatcher.

Maven Fügen Sie pom.xml eine Abhängigkeit hinzu, damit Sie [ArgumentMatchers argThat] verwenden können (https://mvnrepository.com/artifact/org.mockito/mockito-junit-jupiter).

Zum Beispiel ... </ u> </ font>

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

@Service
@RequiredArgsConstructor //Autowired God Repository ohne Verwendung eines Konstruktors
public class GodServiceImpl implements GodService {

  private final GodRepository godRepository; //Endgültig bei Verwendung von RequiredArgsConstructor

  @Override
  public void update(Map map) {
    List<String> updateList = new ArrayList<>(map.keySet()); //Liste in zufälliger Reihenfolge
    godRepository.update(updateList);
  }
}

Erstellen Sie einen Test von

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) //Lassen Sie die erforderlichen Einstellungen usw. weg.
class GodServiceImplTest {

  private GodService godService;

  @Mock
  private GodRepository godRepository;

  @BeforeEach
  public void setUp() {
    godService = new GodServiceImpl(godRepository); //Injizieren Sie das Mocked God Repository
  }

  @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"));
  }
}

Wenn Sie den Test ausführen

org.mockito.exceptions.misusing.PotentialStubbingProblem: 
Strict stubbing argument mismatch. Please check:
 - this invocation of 'update' method:
    godRepository.update([4d, 1c, 2a, 3b]);

Es wird gesagt, dass die Reihenfolge der Argumente unterschiedlich ist.

ArgumentMatcher Daher wird das Argument auch mit argThat von ArgumentMatcher überprüft.

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) //Lassen Sie die erforderlichen Einstellungen usw. weg.
class GodServiceImplTest {

  private GodService godService;

  @Mock
  private GodRepository godRepository;

  @BeforeEach
  public void setUp() {
    godService = new GodServiceImpl(godRepository); //Injizieren Sie das Mocked God Repository
  }

  @Test
  void update() {
    //Wenn nurAll enthält, werden sogar 3 Argumente übergeben. Vermeiden Sie es daher mit der Größe
    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"))));
  }
}

Recommended Posts