티스토리 뷰

spring boot/snippets

Spying 하는 방법

lingi04 2021. 12. 22. 23:16
...
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
...

@ExtendWith(SpringExtension.class)
public class TestTest {
    @Mock
    EntityRepository entityRepository;

    @AutoSource
    @ParameterizedTest
    public void create_test(Req req, Entity entity, String createUser) throws Exception {
        Req spyReq = spy(req);
        when(spyReq.toEntity(createUser)).thenReturn(entity);

        given(entityRepository.save(entity)).willReturn(entity);

        assertThrows(InvalidExtException.class, () -> entityService.create(spyReq, createUser));
    }
}

지금 보니 위의 코드는 뭔가 좀 이상한 코드네... Mocking 하는데 SpringExtension을 사용 할 필요는 없다.(과거의 나...ㅠㅠ)

대신 이렇게 사용하면 될것 같다.


@ExtendWith(MockitoExtension.class)
public class TestTest {
    // ExtendWith에 MockitoExtension을 넣고 이렇게 어노테이션을 사용 하면
    // Mock 객체가 주입이 됨.
    @Mock
    EntityRepository entityRepository;

    @AutoSource
    @ParameterizedTest
    public void create_test(Req req, Entity entity, String createUser) throws Exception {
        // 아니면 이런 식으로 static method를 import 해서 사용해도 됨.
        Req spyReq = spy(req);
        when(spyReq.toEntity(createUser)).thenReturn(entity);

        given(entityRepository.save(entity)).willReturn(entity);

        assertThrows(InvalidExtException.class, () -> entityService.create(spyReq, createUser));
    }
}

정리 하자면

  1. MockitoExtension을 사용하여 @Mock, @Spy 등을 써서 의존성 주입
  2. mock(), spy()같은 static method를 import 해서 사용

'spring boot > snippets' 카테고리의 다른 글

mocking 하는 방법  (0) 2021.12.22
jpa에서 json column 사용하기  (0) 2021.12.22
entity에 enum list 정의하기  (0) 2021.12.22
jpa repository만 테스트  (0) 2021.12.22
jpa entity에서 column 정의  (0) 2021.12.22
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday