프로그래밍 노트/TEST를 해보자

Mockito 어노테이션(@Mock, @InjectMocks)

깡냉쓰 2019. 11. 18. 22:22
반응형

Mockito 관련 어노테이션

@RunWith(MockitoJunitRunner.class)
Mockito에서 제공하는 목객체를 사용하기 하기위해 위와같은 어노테이션을 테스트클래스에 달아준다.

@RunWith(MockitoJunitRunner.class)
public class Test(){
    ...
}

⇒ 꼭 달아줘야하는건 아니지만, 이 어노테이션을 달지 않으면 아래와 같은 작업이 필요하다.

publc class Test(){
    @Before
    public void setUp(){
            MockitoAnnotations.initMocks(this);
    }
}

@Mock

mock 객체를 생성한다.

@InjectMocks

@InjectMocks라는 어노테이션이 존재하는데, @Mock이 붙은 목객체를 @InjectMocks이 붙은 객체에 주입시킬 수 있다.
실무에서는 @InjectMocks(Service) @Mock(DAO) 이런식으로 Service테스트 목객체에 DAO 목객체를 주입시켜 사용한다.

public class MembmerService{
        private MemberDao dao;

        public Member createMember(Member member){
            if(dao.getMemberCount(member) > 0){
                    ...
                    throw new Exception();
            }
            ...
        }

}

public class MemberDao{
        public int getMemberCount(Membmer member){
                // 미완성
        }
}
@Mock
MemberDao memberDao;

@InjectMocks
MemberService memberService;

@Test
public void test(){
        when(memberDao.getMemberCount()).thenReturn(0);

        Member member = new Member("corn", 25);
        assertThat(memberService.createMember(member), is(member));
}
반응형