개발공부

JUnit으로 컨트롤러 테스트

알릿수 2019. 9. 4. 13:03
반응형

1. JUnit5 는 JDK9부터 사용 가능

프로젝트에서 JDK8을 쓰고있어 JUnit4를 사용합니다.

2. 프로젝트 디렉토리 구조

관례적으로 아래와 같은 디렉토리를 구성하도록 합니다.

테스트가 필요한 소스 클래스에서 Ctrl + Shift + T 를 누르면 IDE가 소스 디렉토리와 동일한 위치에 Test 클래스를 생성해줍니다.

project
  ㄴsrc
    ㄴmain
      ㄴjava
        ㄴcontroller
          ㄴHistoryController.java
        ㄴrepository
          ㄴHistoryRepository.java
      ㄴresources
    ㄴtest
      ㄴjava
        ㄴcontroller
          ㄴHistoryControllerTest.java
        ㄴrepository
          HistoryRepositoryTest.java
       ㄴresources


Test 파일은 소스 파일과 같은 경로에 위치하도록 합니다.

3. Annotation

스프링 부트에서 JUnit 테스트를 하기 위해서는 테스트 클래스 위에 아래 어노테이션이 필요합니다.

@RunWith(SpringRunner.class)

@SpringBootTest

 

4. Controller 테스트 (MocMvc 사용하기)

만약, 컨트롤러 테스트를 위하여 MockMvc를 사용하고자 한다면, 아래와 같은 어노테이션을 추가해주어야 합니다.

(@SpringBootTest 어노테이션 만으로는 서버를 실행하지 않기 때문이라고 함..)

@AutoConfigureMockMvc

추가하지 않는다면 아래와 같이 MockMvc를 @Autowired 하였을때 불평을 합니다.

Could not autowire. No beans of 'MockMvc' type found.

컨트롤러 테스트 클래스는 아래와 같은 어노테이션을 갖게 됩니다.

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class HistoryControllerTest {

    @Autowired  
    private MockMvc mvc;

}

 

5. Test 함수 작성(GET Method)

JUnit으로 Test 함수가 실행되기 위해서는 아래와 같은 조건이 필요합니다.

  • 함수의 상단에 @Test 어노테이션이 필요합니다.
  • 접근제어자가 public 이어야 합니다.
  • 함수의 return 타입이 void 여야 합니다.

 

6. GET Method Test

HistoryControllerTest에서 HistoryController가 제공하는 api를 호출하는 함수를 작성합니다.

테스트 대상 URL은 http://localhost:8080/history/load 로 동작하며,
아래의 코드로 해당 URL로의 GET request의 응답이 200인지 확인해봅니다.

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class HistoryControllerTest {
	@Autowired
    private MockMvc mvc;
    
    @Test
    public void loadDump() throws Exception {
        this.mvc.perform(get("/history/load"))
                .andExpect(status().isOk());
    }
}

 

반응형