이지목(easymock)을 사용할 때는 인터페이스의 목만 만들 수 있어서 불편했습니다. 물론, 이지목 확장팩(?)을 이용하면 클래스의 목객체도 만들 수 있었는데, 별도의 라이브러리를 추가해야 하는것이.. 좀 귀찮았죠. 요즘은 어떤지 몰겠습니다. 라이브러리 버전 올리면서 통합 할 법도 한데 말이죠.

암튼.. 저는 이지목보다 조금 더 간편하고 직관적인 라이브러리인 목킷투를 사용하고 있었는데, 예전에 살짝 공부한 상태에서 다시 별로 안 썼더니 그새에 많은 변화가 있었더군요. 그 중 가장 큰 변화가 애노테이션인 듯 한데요. 애노테이션을 이용해서 목객체를 아주 편리하게 만들 수 있었습니다.

@RunWith(MockitoJUnitRunner.class)
public class MemberServiceTest {

    MemberService memberService;
   
    @Mock MemberRepository mockMemberRepository;
    @Mock SignupSendService mockSignupSendService;

    @Before
    public void make() throws Exception {
        memberService = new MemberService();
        memberService.repository = mockMemberRepository;
        memberService.signupSendService = mockSignupSendService;
        assertNotNull(memberService.repository);
        assertNotNull(memberService.signupSendService);
    }

...

}

끝입니다. mock(MemberReposiroty.class); 같은 static 메서드 호출(이클립스에서 junit은 static import를 지원하지만 mockto는 지원하지 않아서 수동으로 static import 문을 적어줘야 하는 수고가 있죠.) 없이도 목 객체를 만들어(?) 사용할 수 있습니다. 그 비밀은 바로 @Runwith의 MockitoJUnitRunner에 있지요. 저 러너 설정하는 것이 귀찮다면 JUnit @Before 메서드에서 MockitoAnnotations.initMocks(this); 를 직접 호출해도 되지만, 개인적으로는 이걸 없애고 @RunWith를 사용하는 편이 코드가 더 깔끔한 듯 합니다.

목킷투~ 괜찮다~~