[Basic] 테스팅 프레임워크 JUnit

2020. 6. 29. 20:28개발/[Basic]

테스트 코드는 왜 필요한가?

우리가 DAO 를 테스트 한다고 생각해보자.

DAO를 만든 뒤 바로 테스트하지 않고, 서비스 계층, MVC 프레젠테이션 계층까지 포함한 모든 입출력 기능을 만든 후,

WAS를 배치한 뒤, 웹 화면을 띄워 폼을 열고, 값을 입력한 뒤 버튼을 눌러 등록해볼 것이다.

 

얼마나 귀찮은 짓인가? 또한 서버를 재가동 시키기 위해 지금은 작은 규모이지만 그것이 엄청나게 추가가 되어 큰 규모의 서버라고 생각해보자. 서버를 가동시킬 때도 1시간이 걸릴지도 모른다.

 

그것을 위해 우리는 작은 단위의 테스트를 꼭 진행해야 한다.

 

테스팅 프레임워크 JUnit


JUnit은 말 그대로 자바로 단위 테스트를 만들 때 유용하게 쓸 수 있다. 

또한 프레임워크라 main() 메소드도 필요 없고 오브젝트를 만들어서 실행시키는 코드를 만들 필요가 없다.

 

public class UserDaoTest{
	public static void main(String[] args) throws SQLException{
    	ApplicationContext context = new GenericXmlApplicationContext("spring/applicationContext.xml);
        
        UserDao dao = context.getBean("userDao", UserDao.class);
        
        User user = new User();
        user.setId("user");
        user.setName("박형서");
        user.setPassword("hihi");
        
        dao.add(user);
        
        System.out.println("등록 성공");
        
        User user2 = dao.get(user.getId());
       
        if(!user.getName().equals(user2.getName())){
        	System.out.println("테스트 실패 (name)");
        }
        else if(!user.getPassword().equals(user2.getPassword())){
        	System.out.println("테스트 실패 (password)");
        }
        else{
        	System.out.println("조회 테스트 성공");
        }
        }
}

이러한 코드가 있는 것을 JUnit으로 바꾸어 보겠다.

public class UserDaoTest {
    // JUnit에게 테스트용 메소드임을 알려준다.
    @Test
    public void addAndGet() throws SQLException, ClassNotFoundException {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring/applicationContext.xml");

        UserDao dao = context.getBean("userDao", UserDao.class);
        User user = new User();
        user.setId("user");
        user.setName("박형서");
        user.setPassword("hihi");

        dao.add(user);

        User user2 = dao.get(user.getId());
        // if/else 문장을 Junit은 AssertThat이라는 스태틱 메소드를 이용해 변경한다.
        // is() 는 일종의 equals() 로 비교해주는 기능을 가졌다.
        assertThat(user2.getName(), is(user.getName()));
        assertThat(user2.getPassword(),is(user.getPassword()));
    }
}