2.2.1 테스트 검증의 자동화
- add()와 get()을 통해 다시 DB에서 가져온 User 오브젝트의 정보가 정확히 일치하는가를 테스트
- add()를 통한 등록 자체는 별다르게 검증할 것이 없음. add()이후 별다른 에러가 발생하지 않으면 성공으로 간주
- add()를 통해 등록이 되지 않았다면, get()을 통해 가져오지 못할 것 이므로 get()을 통해 add()의 작업도 함께 확인
- 테스트 실패 종류
- 테스트 에러
- 테스트가 진행되는 동안에 에러가 발생해서 실패
- 테스트 실패
- 에러가 발생하진 않았지만, 결과가 기대한 것과 다르게 나오는 경우
- 테스트 에러
- main()은 제어권을 직접 가지므로, 프레임워크의 기본 동작원리인 IoC가 아니다. 따라서 프레임워크(스프링)에 main()을 사용하는 테스트는 적합하지 않음
- Java에서는 JUnit 프레임워크를 통해 테스트 검증의 자동화 가능
2.2.2 JUit 프레임워크 요구조건 두 가지
- 메소드가 public으로 선언되어야 함
- @Test 애노테이션을 붙여야 함
public class UserDaoTest {
@Test
public void addAndGet() throws SQLException, ClassNotFoundException {
...
}
}
2.2.3 JUnit을 사용한 검증 코드
- JUnit에서 제공하는 static 메서드인 asserThat()을 사용하여 테스트 상에서 오브젝트 비교
- assertThat 메소드의 첫 번째 파라미터와 두 번째 파라미터를 matcher 조건으로 비교
- 비교시 일치하지 않으면 테스트 실패
- is()는 matcher의 일종으로 equals() 처럼 비교 기능
import org.junit.Test;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
public class UserDaoTest {
@Test
public void addAndGet() throws SQLException, ClassNotFoundException {
ApplicationContext applicationContext =
new GenericXmlApplicationContext("applicationContext.xml");
UserDao dao = applicationContext.getBean("userDao", UserDao.class);
User user = new User();
user.setId("ksb 1");
user.setName("ksb");
user.setPassword("ksb-pwd");
dao.add(user);
System.out.println(user.getId() + "등록");
User user2 = dao.get(user.getId());
assertThat(user2.getName(), is(user.getName()));
assertThat(user2.getPassword(), is(user.getPassword()));
}
}
2.2.4 JUnit 테스트 실행
- JUnit 프레임워크 역시 스프링 컨테이너처럼 자바 코드로 만들어진 프로그램이므로 어디선가 한 번은 JUnit 프레임워크를 시작해줘야 함
- main()에 JUnitCore 클래스를 호출하여 테스트 할 수 있도록 함
- 실행 종료시 몇 개의 테스트가 실패 했는지 알 수 있음
- 또한, 테스트 코드에서 검증에 실패한 위치를 알 수 있음
- assertThat() 통한 검증을 통해 기대한 결과가 아닐 시, AssertionError 발생
import org.junit.runner.JUnitCore;
public class Main {
public static void main(String[] args){
JUnitCore.main("com.ksb.spring.UserDaoTest");
}
}
'토비의 스프링 정리' 카테고리의 다른 글
토비의 스프링 - 2.4 스프링 테스트 적용 (0) | 2022.09.28 |
---|---|
토비의 스프링 - 2.3 개발자를 위한 테스팅 프레임워크 JUnit (0) | 2022.09.28 |
토비의 스프링 - 2.1 UserTest 다시 보기 (0) | 2022.09.28 |
토비의 스프링 - 1.9 1장 정리 (0) | 2022.09.26 |
토비의 스프링 - 1.8 XML을 이용한 설정 (0) | 2022.09.26 |