namkyu
8/7/2013 - 4:49 AM

UserServiceMockitoTest.java

package com.kyu.svc.component.user.service;

import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.runners.MockitoJUnitRunner;
import org.mockito.stubbing.Answer;

import com.kyu.svc.component.user.dao.UserDAO;
import com.kyu.svc.component.user.domain.AdminUser;

/**
 * @FileName : UserServiceMockitoTest.java
 * @Project : mySpringProject
 * @Date : 2013. 8. 5.
 * @작성자 : 이남규
 * @프로그램설명 :
 */
@RunWith(MockitoJUnitRunner.class)
public class UserServiceMockitoTest {

  /**
	 * @Mock을 이용하면 mock(UserDAO.class); 와 같은 코드를 호출하지 않아도 되고,
	 * MockitoJUnitRunner.class에 의해 자동으로 목 객체가 생성된다.
	 *
	 * */
	@Mock
	private UserDAO userDAO;

	@InjectMocks
	private UserService userService = new UserService();

	@Before
	public void init() {
		when(userDAO.getUser("kyu")).thenAnswer(new Answer<AdminUser>() {
			@Override
			public AdminUser answer(InvocationOnMock invocation) throws Throwable {
				AdminUser adminUser = new AdminUser();
				adminUser.setUserName("namkyu");
				adminUser.setAge(32);
				return adminUser;
			}
		});

		when(userDAO.getUserCnt()).thenReturn(10);
	}

	@Test
	public void annotationMockTest() {
		AdminUser adminUser = userService.getUser("kyu");
		assertThat("namkyu", is(adminUser.getUserName()));
		assertThat(32, is(adminUser.getAge()));

		assertThat(10, is(userDAO.getUserCnt()));
	}
}