단위테스트 작성
- 소스코드와 단위테스트 코드를 분리, 소스코드는 src 폴더 하위에, 테스트 코드는 test 폴더 하위에 작성1
- 물리적으로는 다른 위치에 작성하지만, 패키지는 동일하게 유지하여 테스트 코드를 용이하게 관리
- JUnit 단위테스트 클래스의 기본 구조
- 한 클래스에 여러 개의 테스트 메소드를 작성 가능
- 테스트 클래스의 이름은 [테스트 대상 클래스이름+Test]와 같은 형태로 명명을 권장
@Before
,@After
어노테이션을 사용해서 테스트 전, 후 작업을 정의
public class TestFixtureExample {
private Calculator calculator;
@BeforeClass
public static void setUpClass(){
/*테스트 시작 전 테스트 대상 클래서에서
한 번만 수행되어야 할 부분 설정
ex.데이터베이스 드라이버 로딩정보*/
}
@AfterClass
public static void tearDownClass(){
/*테스트가 끝난 후 테스트 대상 클래서에서
한 번만 수행되어야 할 부분을 설정
ex.데이터베이스 해제*/
}
@Before
public void setUp() {
/*테스트 시작 전 매번 수행하는 설정
ex.데이터베이스 로그인 정보*/
calculator = new Calculator();
}
@After
public void tearDown(){
/*테스트 종료 후 매번 수행하는 설정
ex.데이터베이스 로그인 정보 해제*/
}
@Test
public void testAdd() {
int result = calculator.add(10, 20);
assertEquals(30, result);
}
@Test
public void testDiv() {
int result = calculator.div(100, 5);
assertEquals(20, result);
}
}
테스트 suite
- 관련된 단위테스트들을 묶어서 수행
@RunWith
어노테이션을 이용해서 테스트 슈트 클래스를 지정@SuiteClasses
어노테이션을 이용해서 묶어서 실행할 테스트 클래스를 지정- 테스트 자동화목적으로는 사용X (테스트 자동화는 별도의 도구를 사용하는 방식을 더 선호)
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses({
ArrayToArrayListTest.class, BankTransferActionTest.class, ListIteratorTest.class, ListTest.class,
MoneyConstructorTest.class, PropertiesTest.class, RightExceptionTest.class, SongTest.class
})
public class AllTests{
}
Hamcrest
- jUnit 4에서 Hamcrest library 추가
assertThat()
2 메소드 - 공학적인 느낌보다는 조금 더 부드러운 문맥적인 흐름을 만들어 줌
import org.junit.Test;
import static org.hamcrest.CoreMatchers.*;
public class HamcrestExmaple {
@Test
public void HamcrestTest(){
/*
assertEquals(기대값, 테스트결과값);
->assertThat(기대값, is(테스트결과값));
*/
assertEquals("kim", user.getId());
assertThat(user.getId(), is("kim"));
}
}