Spring

Spring 통합 테스트에서 void 함수가 호출되었는지 확인하는 방법

기록만이살길 2021. 3. 20. 07:03
반응형

Spring 통합 테스트에서 void 함수가 호출되었는지 확인하는 방법

1. 질문(문제점):

아래와 같이 삭제 기능을 테스트하기위한 통합을 작성했습니다.

@Test
void deleteUsersTest() {
    Map<String, String> params = new HashMap<>();
    params.put("id", "21");
    this.template.delete("/v1/users/{id}", params);
    :
}

내가 직면 한 문제는 void 함수이기 때문에 아래 함수가 내부적으로 호출되었는지 확인하고 싶습니다.

userRepository.deleteById(21)

단위 테스트에서 나는 보통 다음과 같은 것을 사용했습니다.

verify(userRepository, times(1)).deleteById((long) 21);

하지만 위는 통합 테스트에서 사용할 수없는 mockito 기반 기능입니다.

누군가 Spring Integration 테스트 에서이 기능을 확인하는 방법에 대해 나를 도울 수 있습니까?

Spring 5, Spring Boot 2.1을 사용하고 있습니다.

2. 해결방안:

통합 테스트는 실제 데이터베이스에서 발생합니다. 을 호출하기 전에 엔티티가 데이터베이스에 delete저장되고을 호출 한 후에 데이터베이스에 저장되지 않았 는지 확인 하십시오 delete.

@BeforeEach
public void setDatabase() {
    client1 = new Client();
    client1.setName("Karl");
    client2 = new Client();
    client2.setName("Pauline");

    testEntityManager.persist(client1);
    testEntityManager.persist(client2);
    testEntityManager.flush();
}
@Test
public void deleteTest() {
    clientRepository.deleteById(client1.getId());

    List<Client> clientListActual = clientRepository.findAll();
    boolean clientExists = clientListActual.contains(client1);

    assertFalse(clientExists);
    assertEquals(1, clientListActual.size());
}
65674565
반응형