상세 컨텐츠

본문 제목

테스트코드 작성 시 Autowired, Mock이란 무엇인가

Java TIL

by 개발일지작성 2023. 12. 28. 02:30

본문

728x90

 Autowired

  • 스프링에서 사용되는 어노테이션으로, 의존성 주입을 위해 사용됩니다.
  • @Autowired 어노테이션이 붙은 필드나 생성자에 해당 타입의 빈(Bean)이 주입됩니다.
  • 주로 스프링 컨텍스트에서 관리되는 빈을 주입할 때 사용합니다.

 

Mock

  • Mockito에서 사용되는 어노테이션으로, 목(Mock) 객체를 생성할 때 사용됩니다.
  • 목 객체는 실제 객체를 대신하여 행동을 정의하고 테스트에서 사용할 수 있습니다.
  • 주로 단위 테스트에서 외부 의존성을 대체하거나 특정 메서드의 동작을 가로챌 때 사용합니다.

예시

@Service
public class SomeService {
    private final SomeRepository someRepository;

    @Autowired
    public SomeService(SomeRepository someRepository) {
        this.someRepository = someRepository;
    }

    public String doSomething() {
        // Some business logic
        return someRepository.getData();
    }
}

@Repository
public interface SomeRepository {
    String getData();
}

이 코드에서 SoneService 는 SomeRepository에 의존하고 있다.

 

테스트코드 작성

@RunWith(MockitoJUnitRunner.class)
public class SomeServiceTest {

    @Autowired
    private SomeService someService; // @Autowired로 스프링에서 SomeService 빈을 주입받음

    @Mock
    private SomeRepository someRepository; // @Mock으로 Mockito에서 SomeRepository의 목(Mock) 객체 생성

    @Test
    public void testDoSomething() {
        // Given
        given(someRepository.getData()).willReturn("MockedData");

        // When
        String result = someService.doSomething();

        // Then
        assertThat(result).isEqualTo("MockedData");
    }
}

이 테스트 코드에서 SomeService 빈을 @Autowired로 주입받고 SoneRepository의 목 객체는 @Mock으로 생성한다.

given() 과 willReturn() 메서드를 사용하여 목 객체의 행동을 정의하고, 그 후 SomeService의 doSomething() 메서드를 호출하여 테스트를 수행한다.

 

이렇게 함으로써 뢰부 의존성인 SomeRepository의 행동을 모의(Mock) 하여 SomeService의 테스트를 진행할 수 있다.

'Java TIL' 카테고리의 다른 글

인텔리제이 톰캣 한글깨짐 해결방법  (0) 2024.03.09
테스트코드 작성(기초)  (0) 2024.01.24
Schedul  (0) 2023.12.23
parameter 전송 및 받아오기  (0) 2023.12.15
깃허브 pull 후 내 코드와 병합하는 과정  (0) 2023.12.12

관련글 더보기