main (UserDaoTest)에는 두 가지 문제점이 있다.
이 두 가지 문제점을 개선해보자.
현재 테스트를 통해 검증하고 싶은 사항은 두 가지 이다.
이를 확인하기 위해 아래의 정보들이 서로 일치한지에 대한 테스트를 진행한다.
테스트에서의 성공과 실패
기존의 테스트 코드를 위의 경우로 다시 나누어서 수정해 보겠다.
if (!user.getName().equals(searchedUser.getName())) {
System.out.println("테스트 실패 (name)");
}
else if (!user.getPassword().equals(searchedUser.getPassword())) {
System.out.println("테스트 실패 (password)");
}
else {
System.out.println("조회 테스트 성공");
}
Comprehensive test (포괄적인 테스트)
main( )메소드를 이용한 테스트 작성 방법만으로는 애플리케이션 규모가 커지고 테스트 개수가 많아지면, 테스트를 수행하는 일이 점점 부담이 될 것이다.
JUnit : 자바로 단위 테스트를 만들 때 유용하게 쓸 수 있는 도구 (프레임워크)
JUnit은 프레임워크 이다.
따라서 프레임워크에서 동작하는 코드는 main( )메소드도 필요 없고, 오브젝트를 만들어서 실행시키는 코드를 만들 필요도 없다.
JUnit을 사용하기 위해 추가할 라이브러리 : com.springsource.org.junit-4.7.0.jar
main( )메소드 내부의 테스트 코드를 일반 메소드로 옮겨보겠다.
새로 만들 테스트 메소드는 JUnit 프레임워크가 요구하는 두 가지 조건을 만족하여야 한다.
@Test
public void addAndGet() throws SQLException {
ApplicationContext context = new GenericXmlApplicationContext("applicationContext.xml");
...
}
테스트 메소드 이름은 의도가 무엇인지 알 수 있는 이름이 좋다.
테스트의 결과를 검증하는 if/else 문장을 JUnit이 제공하는 방법을 이용해 전환해보자.
if (!user.getName().equals(searchedUser.getName())) {
System.out.println("테스트 실패 (name)");
}
이 if 문장의 기능을 JUnit이 제공해주는 assertThat이라는 스태틱 메소드를 이용해 아래와 같이 변경할 수 있다.
assertThat(searchedUser.getName(), is(user.getName()));
assertThat( )메소드
is( )메소드
JUnit 프레임워크도 자바 코드로 만들어진 프로그램이므로 어디선가 한 번은 시작돼야 한다.
어디에든 main( )메소드를 하나 추가하고, 그 안에 JunitCore 클래스의 main 메소드를 호출해주는 코드를 넣어주면 된다.
public static void main(String[] args) {
JUnitCore.main("springbook.user.dao.main");
}
소스코드 : github