본문 바로가기
JUnit/JUnit4

Test시, Mock(가짜) 객체 생성하여 주입해주기.

by taehee.kim.dev 2020. 3. 29.
@RunWith(SpringRunner.class)
public class BookServiceTest {

    /*
        BookService 객체는 BookRepository 객체를 생성자에서 의존성 주입받아 사용하므로,
        BookRepositry가 구현되어있지 않으면, BookService객체에 대한 단위 테스트를 할 수 없다.
        따라서, BookRepositry의 Mock(가짜)객체를 만들어, 해당 가짜 객체의 작동을 미리 정의해 준다.
        그러면, BookService에서 이 가짜객체를 주입받아 테스트를 할 수 있다.
    */
    @Mock
    BookRepository bookRepository;

    @Test
    public void save(){
        // 새로운 Book 객체를 만든다.
        Book book  = new Book();
        // bookRepository 의 save함수를 book객체를 매개변수로 하여 호출하면,
        // book 객체를 반환하라는 것을 미리 정의해준다.
        when(bookRepository.save(book)).thenReturn(book);

        // 이렇게 위에서 정의된 bookRepository 객체를 BookService의 생성자 매개변수로 주입하여
        // 새로운 BookService 객체를 만든다.
        BookService bookService = new BookService(bookRepository);

        // bookService의 save함수를 book객체를 매개변수로 넘기면서 호출하여,
        // 반환값이 위에서 정의한대로 book객체가 그대로 나오는지 확인한다.
        Book result = bookService.save(book);
        
        assertThat(result).isNotNull();
    }
}

댓글