[Spring] JUnit4 단위 테스트
- 웹/Spring
- 2021. 8. 3.
JUnit4
- 자바용 단위 테스트 API
- 단위 테스트 : 하나의 기능이 올바르게 동장하는지 독립적으로 테스트하는 것
- Spring에 포함되어 있다.
JUnit 관련 어노테이션
어노테이션 | 설명 |
@Test | 이 어노테이션이 붙어있는 메소드를 단위 테스트로 인식하고 실행한다. 여러가지 옵션을 줄 수 있다. |
@Ignore | 이 어노테이션을 붙인 테스트 메소드를 무시한다. (테스트의 주석 느낌) |
@Before | 테스트 실행전에 초기화를 진행하는 어노테이션. 테스트 시작 전에 먼저 실행된다. |
@After | 모든 테스트 종료 후 실행된다. |
@RunWith(SpringJUnit4ClassRunner.class) | 테스트를 스프링 테스트로 실행하기 위한 설정 (pom.xml에서 spring-test를 추가해야 사용할 수 있다.) |
@ContextConfiguration(context.xml 경로) | 원하는 context를 로드하여 테스트를 진행할 수 있다. contextt에 실려있는 bean들을 테스트하기 위한 옵션이다. ※ src/main을 실행할 때에는 context의 bean를 자동으로 불러와 주지만 test에서 진행할 때에는 context의 bean들을 자동으로 불러와주지 않는다. 따라서 context를 꺼내서 테스트를 진행하고 싶다면 bean들이 저장된 context파일을 지정해주어야 그 안에 저장된 값들을 사용할 수 있다. 즉 @Runwith과 @ContextConfiguration를 같이 사용해야 src/test에서 context를 사용할 수 있다. (@Autowired를 사용할 수 있다.) |
JUnit 테스트 메소드
메소드 | 기능 |
assertEquals(30, a+b) | 결과 실행시 값이 같으면 테스트 성공 |
assertSame(a, b) | a와 b가 같은 인스턴스일 때 성공 |
assertFalse(a) | 실행 시 a의 값이 false가 반환되면 테스트 성공 |
assertTrue(a) | 실행 시 a의 값이 true가 반환되면 성공 |
fail(msg) | 이 메서드를 만나면 무조건 실패 |
테스트 하는 방법
클래스 구조
위와 같은 구조로 main에서 작성된 Prime 클래스를 PrimeTest 클래스에서 테스트 진행
src/main/java에서 간단하게 소수인지 아닌지 판별하는 코드를 작성한 클래스
클래스는 context.xml에서 bean으로 등록해놓고 사용
@Component
public class Prime {
public boolean isPrime(int num) {
return num % 2 == 0 ? true : false;
}
public void veryAwesomeFunction(int num) throws ClassNotFoundException {
if (num > 0) {
throw new ClassNotFoundException();
}
}
}
src/main/java에서 작성된 코드를 src/test/java에서 test를 진행
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml")
public class PrimeTest {
@Autowired
Prime prime;
// assertFalse
@Test
public void check1() {
System.out.println(prime);
assertFalse("1이 소수가 아니라고 나와야 함",prime.isPrime(1));
}
// assertTrue
@Test
@Ignore // 테스트 주석
public void check3() {
assertTrue("3이 소수라고 나와야 함 ", prime.isPrime(3));
}
// 원하는 예외가 발생해야 통과하는 테스트 (ClassNotFoundException이 나와야함)
@Test(expected=ClassNotFoundException.class)
public void expectedTest() throws ClassNotFoundException {
prime.veryAwesomeFunction(123);
}
// 시간 제한 안에 성공해야 하는 테스트 (ms)
@Test(timeout = 100)
public void timeoutTest() {
for(int i=0; i < 100000; i++) {
System.out.println(i + "번째 출력");
}
}
}
테스트 실행
해당 소스 우클릭 -> Run As -> JUnit Test 실행
실행하면 위와같이 결과가 나오는데 성공/실패/스킵 여부를 나타낸다.
실패한 경우 어느부분에서 실패를 했는지 알려준다. (시간제한안에 성공하지 못한 테스트때문에 실패)
'웹 > Spring' 카테고리의 다른 글
[Spring] lombok - VO 클래스를 간단하게 (설치시 에러해결) (0) | 2021.08.05 |
---|---|
[Spring] JUnit5 반복 테스트 (0) | 2021.08.04 |
[Spring] Log4j Cannot find DTD 에러 (0) | 2021.08.02 |
[Spring] Redirect로 페이지 넘기기 (0) | 2020.10.26 |
[Spring] 커맨드 객체 사용방법#2 (0) | 2020.10.26 |