단위 테스트 (Unit Test)
- 어떤 기능을 구현한 후 해당 기능이 원하는 대로 동작하는지 보기 위해 작성하는 프로그램
- 테스트 중 가장 작은 단위의 테스트에 속한다.
- 어떤 메서드를 실행했을 때 기대하던 값이 잘 나오는지 체크하는 방식으로 진행
TDD (test-driven development, 테스트 주도 개발)
- 조건을 만족하는 테스트 프로그램을 먼저 작성한 후 해당 테스트를 통과하는 기능을 구현하는 방식의 개발
- 테스트 단위로 기능이 구현되기 때문에 더욱 객체지향적인 개발이 가능해진다.
- 익숙하지 않으면 시간이 너무 오래걸리기 때문에 생산성이 저하된다. (생산 비용 증가)
JUnit
- 자바의 단위 테스트용 라이브러리
- 스프링 프로젝트 배포시 작성되어있는 모든 단위 테스트를 통과해야 배포를 진행할 수 있다.
- 기본 버전은 너무 옛날 것이므로 pom.xml에서 버전을 수정한 후 사용
JUnit의 어노테이션들
@Test
- 해당 메서드가 단위 테스트임을 표시하는 어노테이션
@Ignore
- 해당 테스트를 무시한다.
@Before
- 테스트 시작 전 실행하는 메서드
- 테스트 전에 초기화 등의 작업을 먼저 수행하는 역할을 한다.
@After
- 테스트 종료 후 실행하는 메서드
- close() 등의 작업을 수행할 때 사용한다.
JUnit Asserts의 개념과 종류
- 기대하던 결과가 나오면 테스트를 통과하고, 기대하던 값과 결과가 다르면 테스트에 실패한다.
- assertEquals(expect, test) : 기대하던 값과 일치하면 테스트 통과
- assertTrue(test) : 결과가 true면 테스트 통과
- assertFalse(test) : 결과가 false면 테스트 통과
- assertNull(test) : 결과가 null이면 테스트 통과
- assertNotNull(test) : 결과가 null이 아니면 테스트 통과
- assertThrows(expect, test) : 실행 도중 원하는 예외가 발생하면 테스트 통과
- fail() : fail()을 만나면 테스트 실패 (테스트 내부에서 return 같은 역할을 한다.)
spring-test
- spring-context를 JUnit 테스트에서 사용하기 위한 라이브러리
// 예시
@RunWith(SpringRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml")
예시
package com.ezen.springmvc.common;
import org.springframework.stereotype.Component;
@Component
public class MyReducerImpl implements MyReducer {
@Override
public Integer reduce(Integer[] arr) {
int answer = 0;
for (Integer num : arr) {
if (num != null) {
answer += num;
} else {
answer += 0;
}
}
return answer;
}
}
package com.ezen.springmvc.common;
import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml")
public class MyReducerTest {
@Autowired
MyReducer reducer;
@Before
public void test0() {
System.out.println(reducer);
}
@Test
public void test1() {
assertEquals(Integer.valueOf(150), reducer.reduce(new Integer[] {10, 20, 30, 40, 50}));
}
@Test
public void test2() {
assertEquals(Integer.valueOf(120), reducer.reduce(new Integer[] {10, 20, null, 40, 50}));
}
@Test
public void test3() {
assertEquals(Integer.valueOf(0), reducer.reduce(new Integer[] {null, null, null}));
}
}
'Spring' 카테고리의 다른 글
[Spring] Lombok (0) | 2023.07.04 |
---|---|
[Spring] Log4j (0) | 2023.07.04 |
[Spring] 메이븐(Maven) (0) | 2023.07.04 |
[Spring] 의존성 주입 (0) | 2023.07.03 |
[Spring] 스프링 프레임워크란? (0) | 2023.07.03 |