04_단위 테스트.txt
단위테스트 (Unit Test)
하나의 기능(메서드)이 제대로 동작하는지 보기 위한 가장 작은 단위의 테스트
어떤 기능(메서드)를 실행했을 때 기대하던 값이 잘 나오는지 체크하는 방식으로 진행
★★테스트는 무조건 public void 메소드여야 함!
JUnit
자바의 단위 테스트용 라이브러리
프로젝트 배포시 작성 돼 있는 모든 단위 테스트를 통과해야 배포가 진행된다.
JUnit의 어노테이션들
@Test
해당 메서드가 단위 테스트 메서드임을 표시한다.
@Ignore
해당 테스트 메서드를 생략(무시)하고 단위테스트를 진행하도록 만든다.
@Before
테스트 시작 전 실행되는 메서드
@After
테스트 종료 후 실행되는 메서드
JUnit Asserts
assert메서드로 나오는 결과는 테스트 실행 시 JUnit Test결과 창에 표시되는 bar의 색깔을 결정
기대하던 값과 일치하는 결과가 나오면 에 초록bar를 표시되고
기대하던 값과 다른 결과가 나오면 붉은 bar가 표시된다.
assertEquals(기대값, 실제값) : 기대값과 실제값이 일치하면 테스트 통과 (초록바)
assertTrue : 결과가 true면 테스트 통과
assertFalse : 결과가 false면 테스트 통과
assertNull : 결과가 null이면 테스트 통과
assertNotNull : 결과가 null이 아니면 테스트 통과
assertThrows : 예외가 발생하면 테스트 통과
fail : fail()을 만나면 해당 테스트는 무조건 실패
JUnit 테스트 실행 예시
Calculator.java
package com.ezen.util;
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public int randomInt(int size) {
return (int)(Math.random() * size);
}
//문제1. 짝수인 양의 정수를 생성하여 반환하는 메서드
public int getEven() {
int num = (int)(Math.random() * 101);
return num % 2 == 0 ? num : num + 1;
}
//문제2. 어떤 숫자를 하나 전달하면 소수인지 아닌지 판별해주는 메서드
public boolean isPrime(int num) {
if(num < 2) {
return false;
}
//num의 제곱근까지만 돌려도 소수인지 아닌지 알 수 있음
double sqrt = Math.sqrt(num);
for(int i =2; i <= sqrt; ++i) {
if(num % i == 0) {
return false;
}
}
return true;
}
}
CalculatorTest.java
package com.ezen.util;
//이렇게 JUnit 테스트 어노테이션과 assert마다 임포트 해줘야 됨
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
public class CalculatorTest {
//인스턴스 생성
//★다른 폴더지만 같은 패키지(com.ezen.util)므로 임포트가 필요 없음.
Calculator calc = new Calculator();
int a, b;
//테스트 실행횟수를 세고 싶다면 이렇게 하셈
static int i;
//★★테스트는 무조건 public void여야 함!
@Before //테스트 전에 a와 b의 값을 할당하게 됨
public void before() {
System.out.println("Execute @Before (" + ++i + ")");//i가 static이라야 증가하네
a= 10;
b= 20;
}
@After
public void After() {
System.out.println("Execute @After (" + ++i + ")");
}
@Ignore
@Test
public void test() {
int result = calc.add(a, b);
assertEquals(30, result);
}
@Ignore
@Test
public void randomTest1() {
for(int i = a; i < b; ++i) {
assertTrue(calc.randomInt(i) < i - 1);
}
}
//문제 1. 짝수인 양의 정수를 생성하여 반환하는 getEven()에 대한 테스트
public void getEvenTest1() { //짝수인지 확인
int num = calc.getEven();
assertTrue(num%2==0);
}
//이렇게 다방면으로 테스트 해주면 좋음
public void getEvenTest2() { //홀수가 아닌지 확인
int num = calc.getEven();
assertFalse((num%2==1));
}
//ArrayList는 자바 1.7 이상부터 되는데 지금 1.6버전이라 어레리 없음
//pom.xml 가서 자바 버전 1.8 로 고치고 메이븐 플젝 업데이트 해주기
public void getEvenTest3() { //랜덤 생성된 짝수 중에 0이 존재하는지
ArrayList<Integer> evens = new ArrayList<>();
for(int i = 0; i < 20000; ++i) {
evens.add(calc.getEven());
}
assertTrue("evens에 0이 발견됐습니다.", evens.contains(0));
//이렇게 메시지를 달아놓으면 테스트 실패시 메시지가 뜸
}
//문제 2. 소수인지 아닌지 판별해주는 메서드에 대한 테스트
public void isPrimeTest1() { //소수 집어넣어서 테스트
assertTrue(calc.isPrime(13));
}
public void isPrimeTest2() { //소수 아닌 것 집어넣어서 테스트
assertFalse(calc.isPrime(14));
}
public void isPrimeTest3() { //1에 대한 테스트
assertFalse("1을 소수로 판별함", calc.isPrime(1));
//1은 소수가 아니니까 assertFalase에 초록불이 떠야 하는데
//그렇지 않을때 빨간불과 함께 에러메시지가 뜸
}
public void isPrimeTest4() { //음수일 때도 false 나와야 됨
assertTrue("-7을 소수로 판별함", calc.isPrime(-7));
}
}
'Spring' 카테고리의 다른 글
05_Maven (0) | 2022.08.08 |
---|---|
[STS_세팅 가이드] 스프링 자바 버전 업데이트 (ArrayList는 자바 1.7버전 이상부터 사용 가능) (0) | 2022.08.06 |
01_스프링 프레임워크 (0) | 2022.08.05 |
서블렛 버전 업데이트 가이드 (미완, 어쩌고쿠키 뭔지 알아서 수정하기) (0) | 2022.08.05 |
스프링 빈 테스트 (미완성) (0) | 2022.08.05 |