[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 실행 방법
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 {
}
댓글
댓글 쓰기