단위테스트(Unit Test)를 작성하는데 AAA 패턴을 이용해서 작성하면 단순하고 균일한 구조를 갖는데 도움을 주며 가독성 또한 좋아진다.
AAA패턴이란 준비(arrange), 실행(act), 검증(assert) 세 단계로 Test를 작성하는 패턴을 의미한다.
- 준비(arrange) : 테스트에 필요한 변수나 객체를 생성한다. 필요에 따라 mock 객체를 만든다.
- 실행(act) : 테스트 할 코드를 실행해 본다.
- 검증(assert) : 실행한 코드가 설계한대로 정확하게 동작했는지를 검증해본다. Unit Test의 Api인 assertEqals() 등의 코드를 사용하여 검증한다.
비슷한 패턴으로 Given-When-Then 패턴이 존재 한다.
아래 코드는 AAA패턴을 이용해서 Test 코드를 작성한 것이다.
import static org.junit.Assert.*;
import org.junit.Test;
public class MyMathTest {
@Test
public void mul_of_two_numbers() {
// arrange
MyMath math = new MyMath();
int first = 5;
int second = 30;
// act
int result = math.mul(first, second);
// assert
assertEquals(150, result);
}
}
각 단계마다 코드의 길이에 대한 설명이다.
- 준비(arrange) : 필요한 객체를 생성하고 필요한 변수들을 셋팅하는 과정이기 실행이나 검증 단계보다 코드가 길어질 수 있다. 준비 단계 코드가 너무 길어지고 다른 테스트와의 유사성이 있다면 중복된 부분을 private 함수를 이용해서 리팩토링하는 것도 좋은 방법이다.
- 실행(act) : 보통 한줄의 코드이다. 실행 구절이 두줄 이상이라면 잘못 설계된 API일 가능성이 높다.
- 검증(assert) : 유닛 테스트란 단일 동작을 검증하는 단위테스트다. 하지만 단일 동작으로 여러 결과를 낼 수 있기 때문에 코드가 길어 질 수 있다.
JAVA 코드를 유닛 테스트 하기위하여 Junit을 이용하여 Eclipse 환경에서의 방법을 알아보자.
이클립스(Eclipse) 버전은 2022-03(4.23.0) 버전을 사용하였다.
JDK는 18.0.1.1 버전을 사용하였다.
최근 몇년간의 버전이라면 아래 방법과 큰차이가 없을 것이다.
외부라이브러리를 번거롭게 수동으로 추가해주지 않아도 된다.
File -> New -> Java Project 를 실행하여 아래와 같은 팝업창에서 프로젝트 명을 입력하고 Finish 버튼을 누른다.
그 이후에 새로 만들어진 프로젝트에 새로운 Class를 생성한다.
프로젝트에 Src를 클릭하고 오른쪽 버튼을 눌러서 Class를 선택한다. 그러면 아래와 같은 팝업창이 뜨는데 class이름을 입력하고 Finish를 누른다.
그리고 아래와 같이 클래스를 작성한다.
그 이후에 프로젝트의 Src에 오른쪽 버튼을 누른 후 New-> Junit Test Case를 선택한다.
그러면 아래와 같은 팝업창이 뜨는데 New JUnit 4 test를 선택하고 Name을 입력하고 Finish를 누른다.
그러면 JUnit 라이브러리가 없으니 추가하라고 나오는데 아래와 같이 선택하고 OK 버튼을 누른다.
그러면 아래와 같이 테스트 클래스가 생성된다.
이 테스트 클래스를 실행하기 위해서는 테스트클래스에 오른쪽 버튼을 눌러 Run As -> JUnit Test 를 클릭한다.
그러면 아래와 같이 실패했다는 정보를 확인할 수 있다.
아래와 같이 테스트 클래스의 코드를 변경한다.
import static org.junit.Assert.*;
import org.junit.Test;
public class MyMathTest {
@Test
public void test() {
MyMath math = new MyMath();
assertEquals(10, math.add(3, 7));
}
}