본문으로 바로가기

Spring unittest 설정에 대해서

category Programming 2019.03.14 00:39

1. Spring 설정 참조가 필요 없는 클래스의 단위 테스트

MockitoJUnitRunner를 사용 : Spring 관련 설정이 필요 없음

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 @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() { } }
  • 테스트 할 클래스에서 spring annotation을 통해서 주입되어야 할 객체를 Mock annotation을 추가해서 선언

  • 테스트 할 클래스를 InjectMocks annotation을 추가해서 생성

  • setUp 에 MockitoAnnotations.initMocks(this); 추가

2. Spring 설정 참조가 필요 한 클래스의 단위 테스트

SpringJUnit4ClassRunner를 사용 : Spring 관련 설정이 필요 함

이런 경우는 드문 듯 합니다. 대표적인 예로 프로퍼티 읽는 부분이 문제가 되서 사용했던 케이스가 있습니다.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 @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() { } }
  • 테스트 용 Spring context 설정 파일 생성(test-resource-rootpath/package/TestTargetServiceTest-context.xml)

  • 테스트 할 클래스와 연관된 모든 설정을 추가

  • 테스트 할 클래스에서 spring annotation을 통해서 주입되어야 할 객체를 Mock annotation을 추가해서 선언

  • 테스트 할 클래스를 Autowired와 InjectMocks annotation을 추가해서 선언
    또는 InjectMocks 만 추가가고 직접 생성해도 됨

  • setUp 에 MockitoAnnotations.initMocks(this); 추가

3. 통합 테스트

SpringJUnit4ClassRunner를 사용 : Spring 관련 설정이 필요 함

2번 설정에서 Mock 설정만 빠짐

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 @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() { } }
  • 테스트 용 Spring context 설정 파일 생성(test-resource-rootpath/package/TestTargetServiceTest-context.xml)

  • 테스트 할 클래스와 연관된 모든 설정을 추가

  • 테스트 할 클래스를 Autowired annotation을 추가해서 선언

4. Static 메소드 mocking 테스트

PowerMockRunner를 사용

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 @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() { } }
  • Static 메소드가 있는 클래스를 @PrepareForTest annotation에 추가

  • 테스트 할 클래스에서 spring annotation을 통해서 주입되어야 할 객체를 Mock annotation을 추가해서 선언

  • 테스트 할 클래스를 InjectMocks annotation을 추가해서 생성

  • setUp 에 MockitoAnnotations.initMocks(this);와 PowerMockito.mockStatic(TestTargetStaticMethodClass.class); 추가

5. Controller 단위 테스트

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 @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(orgAnalysisController).build(); } @After public void tearDown() throws Exception { } @Test public void test() { } }

 

6. Controller 통합테스트

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 @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() { } }

 


댓글을 달아 주세요

대마도사 블로그
블로그 이미지 대마도사 님의 블로그
MENU
VISITOR 오늘9 / 전체12,585