1. Spring 설정 참조가 필요 없는 클래스의 단위 테스트
# MockitoJUnitRunner를 사용 : Spring 관련 설정이 필요 없음 # 테스트 할 클래스에서 spring annotation을 통해서 주입되어야 할 객체를 Mock annotation을 추가해서 선언 # 테스트 할 클래스를 InjectMocks annotation을 추가해서 생성 # setUp 에 MockitoAnnotations.initMocks(this); 추가
@RunWith(MockitoJUnitRunner.class) public class TestTargetServiceTest { @Mock private MockService mockService;
@InjectMocks private TestTargetService testTargetService = new TestTargetServiceImpl();
@Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); }
@After public void tearDown() throws Exception { }
@Test public void test() { } } |
2. Spring 설정 참조가 필요한 클래스의 단위 테스트
# SpringJUnit4ClassRunner를 사용 : Spring 관련 설정이 필요 함 # 이런 경우는 드문 듯 합니다. 대표적인 예로 프로퍼티 읽는 부분이 문제가 되서 사용했던 케이스가 있습니다. # 테스트 용 Spring context 설정 파일 생성(test-resource-rootpath/package/TestTargetServiceTest-context.xml) # 테스트 할 클래스와 연관된 모든 설정을 추가 # 테스트 할 클래스에서 spring annotation을 통해서 주입되어야 할 객체를 Mock annotation을 추가해서 선언 # 테스트 할 클래스를 Autowired와 InjectMocks annotation을 추가해서 선언 # 또는 InjectMocks 만 추가가고 직접 생성해도 됨 # setUp 에 MockitoAnnotations.initMocks(this); 추가
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration public class TestTargetServiceTest { @Mock private MockService mockService;
@Autowired @InjectMocks private TestTargetService testTargetService;
@Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); }
@After public void tearDown() throws Exception { }
@Test public void test() { } } |
3. 통합 테스트
# SpringJUnit4ClassRunner를 사용 : Spring 관련 설정이 필요 함 # 2번 설정에서 Mock 설정만 빠짐 # 테스트 용 Spring context 설정 파일 생성(test-resource-rootpath/package/TestTargetServiceTest-context.xml) # 테스트 할 클래스와 연관된 모든 설정을 추가 # 테스트 할 클래스를 Autowired annotation을 추가해서 선언
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration public class TestTargetServiceTest { @Autowired private TestTargetService testTargetService;
@Before public void setUp() throws Exception { }
@After public void tearDown() throws Exception { }
@Test public void test() { } } |
4. Static 메소드 mocking 테스트
# PowerMockRunner를 사용 # Static 메소드가 있는 클래스를 @PrepareForTest annotation에 추가 # 테스트 할 클래스에서 spring annotation을 통해서 주입되어야 할 객체를 Mock annotation을 추가해서 선언 # 테스트 할 클래스를 InjectMocks annotation을 추가해서 생성 # setUp 에 MockitoAnnotations.initMocks(this);와 PowerMockito.mockStatic(TestTargetStaticMethodClass.class); 추가
@RunWith(PowerMockRunner.class) @PrepareForTest(TestTargetStaticMethodClass.class) public class TestTargetServiceTest { @Mock private MockService mockService;
@InjectMocks private TestTargetService testTargetService = new TestTargetServiceImpl();
@Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); PowerMockito.mockStatic(TestTargetStaticMethodClass.class); }
@After public void tearDown() throws Exception { }
@Test public void test() { } } |
5. Controller 단위 테스트
@RunWith(MockitoJUnitRunner.class) public class TestTargetControllerTest { @Mock private MockService mockService;
@InjectMocks private TestTargetController testTargetController; private MockMvc mockMvc;
@Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); mockMvc = MockMvcBuilders.standaloneSetup(testTargetController).build(); }
@After public void tearDown() throws Exception { }
@Test public void test() { } } |
6. Controller 통합테스트
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration @TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = false) @Transactional @WebAppConfiguration public class TestTargetControllerTest { @Autowired private WebApplicationContext webApplicationContext;
private MockMvc mockMvc;
@Before public void setUp() throws Exception { mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); }
@After public void tearDown() throws Exception { }
@Test public void test() { } } |
'JAVA' 카테고리의 다른 글
[Java] Rest API (0) | 2020.02.21 |
---|---|
[Java] DAO,DTO,Entitiy Class (0) | 2020.02.16 |
[Java] Unit Test - 2.테스트 개요 (0) | 2020.02.05 |
[Java] Unit Test - 1.테스트 개요 (0) | 2020.02.03 |
[JAVA] @Scheduled Cron 표현식 (0) | 2019.08.09 |