[Spring] 통합 test하는 방법

[Spring] 통합 test하는 방법

Spring Boot Framework를 사용하여 REST API Server를 만든 뒤 테스트 하는 방법을 정리

Test 파일 방법

  • 보통 src아래에 test/<package_path>/ 아래에 테스트가 모여 있다. 이곳에 테스트 파일을 생성한다
  • 테스트 파일명은 대게 ~~Test(ex : exampleRepositoryTest) 이런 패튼을 사용

테스트 클래스 정의

  • 테프트 파일을 생성하고 난 뒤에 테스트 클래스를 생성할 때 
    • RunWith, SpringBootTest, AutoConfigureMockMvc 어노테이션을 사용한다.
    • 밑의 코드의 파일명은 yourtest.java이런식이다
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class YourTest {...}

MockMvc 객체 정의

  • class 내부에는 REST API를 서버 측에서 테스트 할 수 있는 MockMvc 객체를 정의해 둠
  • MockMvc 객체는 서버를 직접 띄우지 않더라도 REST API를 테스트 할 수 있도록 함
  • Spring은 자동으로 해당 Bean을 주입할 수 있도록 Autowired annotation을 사용함
@Test
public void deSomeTest() throws Exception {
    // test code here
    ...
}

Test 메소드 정의

  • Test 메소드를 작성할 때에는 구체적인 테스트 방법을 알 수 있는 메소드 명을 사용하며, 메소드 이름 또한 ~Test로 끝나는 것이 관례이며 또 이를 추천한다.
  • 테스트 메소드 위에는 junit library가 test임을 알 수 있도록 Test annotation을 사용한다.
@Test
public void doSoemTest() throws Exception {
    // test code here
    ...
}


MockMvc 객체를 사용한 테스트

  • 아래의 코드는 HTTP GET method를 사용하여 /your/test/url로 접속하고, parameter1 인자로 value1을 넘겨서 그 결과의 Response Code가 200인지 확인한다.
this.mvc.perform(get("/your/test/url").param("parameter1", value1)).andExpect(status().isOk());

  • 결과 데이터를 받고 싶다면 .andExpect() 뒤에 .andReturn()메소드를 연결한다
  • 그 결과 뒤에 데이터 객체에 .getResponse() 메소드와 .getContentAsString()메소드를 연결하여 결과 데이터를 Strring으로 변환한다.
MvcResult result = this.mvc.perform(get("/your/test/url").param("parameter1", value1)).andExpect(status().isOk()).andReturn();
String returnedData = result.getResponse().getContentAsString();




Test 실행 방법
./gradlew test


Test 결과 분석

  • test를 실행하면 테스트 로그가 출력된다. 
  • 테스트 로그를 자세히 보면 파일이 file:///<your-porject-path>/~~~ 경로에 저장되었음을 알려준다
  • 해당 디렉토리를 복사하여 웹에 띄우면 아래와 같이 나온다

+어노테이션 


@Test

메소드 위에 선언되면 이 메소드는 테스트 대상 메소드임을 의미

 @Test
    public void testSum() { 

    }


@Before

메소드 위에 선언되면 해당 클래스 안에 메소드들이 테스트 되기 전에 실행됨
@Before
    public void setUp() throws Exception {

    }

@After 

메소드 위에 선언되면 해당 클래스 안에 메소드들이 테스트 된 후에 실행됨
@After
    public void tearDown() throws Exception {

    }

@BeforeClass, @AfterClass

해당 테스트 클래스에서 딱 한번씩만 수행되도록 지정하는 어노테이션
@BeforeClass
    public static void setUpBeforeClass() throws Exception {

    }

    @AfterClass
    public static void tearDownAfterClass() throws Exception {

    }

출처


댓글

이 블로그의 인기 게시물

[소프트웨어공학] NS(Nassi-Schneiderman) 차트

[컴퓨터네트워크] Telnet이란?

[Python] # -*- coding: utf-8 -*-를 쓰는 이유