• Home
  • About
    • Junseok photo

      Junseok

      개발자 블로그

    • Learn More
    • Facebook
    • Instagram
    • Github
  • Posts
    • All Posts
    • All Tags
  • Java
    • java-basic
    • java-solid
    • java-pattern
    • java-logging
  • Javascript
  • Angular
  • spring
    • spring-framework
    • spring-boot
    • spring-test
  • server
    • jeus
    • webtob
    • tomcat
  • test
    • junit
    • assertj
    • hamcrest
    • dbunit
    • spring
  • docker
  • unix
  • maven
  • db
  • network
  • eclipse
  • intellij
  • microservices
  • etc

mockito

07 Jul 2019

Reading time ~1 minute

Mockito Test 에서 @(Annotation) 활용하는 방법

@RunWith(MockitoJUnitRunner.class)
public class MockitoAnnotationTest {
    ...
}
@Before
public void init() {
    MockitoAnnotations.initMocks(this);
}

@Mock Annotation

@Test
public void whenNotUseMockAnnotation_thenCorrect() {
    List mockList = Mockito.mock(ArrayList.class);

    mockList.add("one");
    Mockito.verify(mockList).add("one");
    assertEquals(0, mockList.size());

    Mockito.when(mockList.size()).thenReturn(100);
    assertEquals(100, mockList.size());
}
@Mock
List<String> mockedList;

@Test
public void whenUseMockAnnotation_thenMockIsInjected() {
    mockedList.add("one");
    Mockito.verify(mockedList).add("one");
    assertEquals(0, mockedList.size());

    Mockito.when(mockedList.size()).thenReturn(100);
    assertEquals(100, mockedList.size());
}

@InjectMocks Annotation

쉽게 말하면 테스트 하려는 클래스의 참조변수들을 mock으로 주입(초기화) 해야 하는 경우

테스트 클래스에서 @Mock 애너테이션을 달고 있는 필드들(Mock으로 생성되는 객체들) 을

실제 product 클래스(테스트 클래스에 @InjectMocks 애너테이션을 달고 있는 필드)의 필드에 Mock 객체로 주입해 준다.


Mockito의 InjectMocks..

InjectMocks은 생성자, 설정자(setter), 필드 순서로 찾아서 주입을 하게 되어 있다.
만약 생성자가 존재하고, 생성자에는 내부에 선언된 필드의 초기화를 수행하지 않는 경우 null 에러 발생 주입은 실패한다.

Mockito javadoc에 InjectMocks이 주입하는 방법에 대해 나와있다.

또 하나의 문제는 만약 성공하던 테스트에 생성자를 새롭게 추가하게 된다면 어느 날 갑자기 테스트는 실패하게 될 것이다.



testmockito Share Tweet +1