본문 바로가기

JAVA

[Java] Unit Test - 3.테스트 작성

728x90
반응형

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() {

    }

}

 

728x90
반응형

'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