2012-07-20 4 views
1
public String createUser() { 

    Session session = HibernateUtility.getSession(); 
    Transaction tx = session.beginTransaction(); 

    session.save(this); 
    tx.commit(); 
    session.close(); 

    return "accountCreated"; 

} 

어떻게이 단위 테스트 케이스를 작성합니까?어떻게이 단위 테스트 케이스를 작성 하시겠습니까?

+1

을 당신이 정확하게 테스트 할 수 있습니까? 라이브러리 메소드가 작동하는지 여부는 테스트 포인트가 아닙니다 ... createUser() 메소드의 동작을 테스트하려면 메소드를 사용하여 사용자를 생성하십시오. 사용자를 검색하고 테스트가 완료된 후 삭제하십시오. – hovanessyan

답변

3

HibernateUtility.getSession()과 같은 정적 메서드 호출을 포함하는 테스트 코드를 단위 화하는 것은 어렵습니다. 당신은 세션 인스턴스를 주입하는 것이 좋습니다

합니다 (createUser() 메서드에 대한 매개 변수를 추가하여 아마도, 또는이 방법은 Session 인스턴스를 취득하는 데 사용할 수있는 Session Factory 객체를 포함하는 객체를 제공함으로써). 그런 다음 Mockito 또는 이와 유사한 프레임 워크를 사용하여 메소드 Session 객체를 제공하고 예상되는 호출이 수행되는지 확인합니다. Mockito를 사용

public String createUser(Session session) { 
    Transaction tx = session.beginTransaction(); 

    session.save(this); 
    tx.commit(); 
    session.close(); 

    return "accountCreated"; 
} 

, 단위 테스트는 다음과 같습니다

public testCreateUser(){ 
    Session session = mock(Session.class); 
    Transaction trans = mock(Transaction.class); 

    when(session.beginTransaction()).thenReturn(trans); 

    obj.createUser(session); 

    verify(session).save(obj); 
    verify(session).close(); 
    verify(trans).commit(); 
} 
+0

고마워요 :) 자바에서 모의 ​​객체를 만드는 법을 가르쳐 줄 수 있습니까? 내 패키지에서 모의 ​​클래스를 찾을 수 없습니까 ?? – Kshitij

+0

당신은 이것을 위해 별도의 조롱 라이브러리를 사용할 필요가 있습니다. Java와 함께 제공되는 것은 아닙니다. 나는 Mockito를 선호하지만 많은 선택 사항이 있습니다. http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html – codebox

관련 문제