작성일자 2022.08.05
사용 IDE : STS4
1. JUnit Test Case 생성
테스트의 클래스명 = 프로덕션 클래스 명 + Test
2. 테스트 케이스 작성하기
package calculrator;
public class Calculator {
int add(int i, int j) {
return i+j;
}
int subtract(int i, int j) {
return i-j;
}
int multiply(int i, int j) {
return i*j;
}
int divide(int i, int j) {
return i/j;
}
}
Calculator.java
STS, eclipse라인 삭제(Window) = Ctrl + D
package calculrator;
import static org.junit.Assert.*;
import org.junit.Test;
public class CalculatorTest {
@Test
public void add() {
Calculator cal = new Calculator();
int result = cal.add(2, 1);
// 과거에는 결과값을 확인할 때 sysout을 사용해서 확인했지만
// JUnit을 활용할 경우에는 static org.junit.Assert.*을 import 하면 assertEquals()를 이용할 수 있다.
assertEquals(3, result); // 첫번째 인자: 기대하는 값
}
@Test
public void divide() {
Calculator cal = new Calculator();
int result = cal.divide(9, 3);
assertEquals(3, result);
}
}
CalculatorTest.java
static Assert 클래스를 활용하여 JUnit을 활용할 수 있다!
테스트마다 반복적으로 Calculator객체 를 생성할 필요는 없지 않나요?
=> Class의 멤버필드로 변경
작성한 라인을 위로 이동시키기(Window) = Alt + ↑
or Refactor - Convert Local Varialbe to Field
단, JUnit은 이렇게 멤버필드로 초기화 하는 방법을 추천하지 않는다.
왜? 테스트가 실행이될 때 초기화 작업이 단 한 번만 실행된다. 즉 add 메소드와 divide 메소드에서 객체를 공유한다.
이렇게 되면 만약 add 소드에서 객체의 상태를 바꾸는 경우 변경된 상태의 객체가 divide 메소드에도 영향을 끼칠 수 있다.
즉, 테스트 간의 독립성을 보장하는 데에 한계가 있고 테스트의 결과를 보장할 수 없게된다.
JUnit은 @Before 어노테이션으로 초기화하는 방법을 추천한다!
즉 @Before 어노테이션을 통해 테스트가 실행될 때 매번 테스트가 서로 영향을 끼치지 않으며 독립적으로 실행되는 것을 보장할 수 있다. 이로 인해 테스트를 안정적으로 할 수 있다.
setup 메소드는 테스트가 실행될 때 1번 호출이 아닌 각각의 테스트 메소드가 호출될 때 마다 setup 메소드가 호출됨으로 해당 객체에 대한 초기화 작업을 매번 실행한다.
@After 어노테이션은 테스트 메소드가 실행될 때 마다
초기화 작업(@Before)이후 후처리 작업을 진행하는 어노테이션이다.
=> 각 테스트 간의 독립성을 지원하도록 보장하고 있다.
package calculrator;
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class CalculatorTest {
private Calculator cal ;
@Before
public void setup() {
cal = new Calculator();
System.out.println("setup!");
}
@Test
public void add() {
int result = cal.add(2, 1);
// 과거에는 결과값을 확인할 때 sysout을 사용해서 확인했지만
// JUnit을 활용할 경우에는 static org.junit.Assert.*을 import 하면 assertEquals()를 이용할 수 있다.
assertEquals(3, result); // 첫번째 인자: 기대하는 값
System.out.println("add!");
}
@Test
public void divide() {
int result = cal.divide(9, 3);
assertEquals(3, result);
System.out.println("divide!");
}
@After
public void teardown() {
System.out.println("teardown!");
}
}
CalculatorTest.java
즉, @before -> @Test -> @After 이 순서가 반복됨을 알 수 있다.
3. 테스트 케이스 실행해보기 ( 윈도우 단축키: Ctrl+F11 )
4. 실행완료 화면
초록색이 뜨면 성공했다는 의미
빨간색이 뜨면 성공하지 못했다는 의미
@Test 어노테이션이 붙어있기 때문에 JUnit 라이브러리가 해당 메소드를 테스트로 실행할 수 있다.
블럭을 아래에 그대로 복사(Window) = Ctrl + Alt + ↓
개꿀팁이당.
'Web > Spring' 카테고리의 다른 글
[Spring Security] @AuthenticationPrincipal에 null값 들어오는 문제 해결 방법 (2) | 2023.11.16 |
---|---|
[인프런] 스프링부트 개념정리(이론) - 1 (1) | 2022.10.05 |
[3] 스프링부트로 웹 서비스 출시하기 - 3. SpringBoot & Handlebars로 화면 만들기 (0) | 2022.08.13 |
[2] 스프링부트로 웹 서비스 출시하기 - 2. SpringBoot & JPA로 간단 API 만들기 (0) | 2022.08.01 |
[1] 스프링부트로 웹 서비스 출시하기 - 1. SpringBoot & Gradle & Github 프로젝트 생성하기 (0) | 2022.07.21 |