2014-06-24 6 views
0

현재 updateIssuesTable() 메서드를 테스트하고 있습니다. 이 메소드는 비공개 void 메소드입니다. 더 나쁜 것은이 메서드 내에서 Connection을 반환하는 getConnection()에 대한 호출이며 초기화 메서드에 종속적 인 여러 개인 변수에 종속되어 있으며 이는 물론 다른 것으로 종속되어 있습니다.스텁/모의 개인 메서드

길고도 짧은 이야기,이 코드 줄 : 나는 전혀 실행하지 않으 Connection conn = getConnection();

, 방금 실행을 계속하려면 조롱 연결이 필요합니다.

다음과
public void testUpdateIssuesTable() throws Exception { 
     PatchWriterTask task = new PatchWriterTask(); 

     String sql = "update val_issues set PATCH_CREATION_INFO = ? where VAL_ISSUE_ID = ?"; 
     when(task1.getConnection()).thenReturn(conn); 
     when(conn.prepareStatement(sql)).thenReturn(updateStatement); 
     Whitebox.invokeMethod(task, "updateIssuesTable"); 
    } 

내가 테스트입니다 방법은대로 :

private void updateIssuesTable() throws SQLException { 

      PreparedStatement createStatement = null; 
      String sql = "update val_issues set PATCH_CREATION_INFO = ? where VAL_ISSUE_ID = ?"; 
      Connection conn = getConnection(); 
      createStatement = conn.prepareStatement(sql); 
      ... 
    } 

편집 : Belowe은 시험 방법

private Connection conn = mock(Connection.class); 
+0

프로그램의 메인 클래스에서'Connection' 객체를 만드는 것이 더 좋습니다. 모든 클래스의 methods()에서 'Connection Class의 인스턴스를 반환하는 Main Class의 메소드 호출'을 사용합니다. –

+0

이 메소드는 여전히'getConnection()'과 같은 메소드를 호출하여 연결을 설정해야합니다. 나는 당신이 무엇을 제안하고 있는지, 왜 도움이 될지 잘 모르겠습니다. – DanGordon

+0

사실 나는 '조롱'이란 무엇을 의미하는지에 대한 귀하의 성명을 이해하지 못했습니까? 미안하지만, 당신이 내가 모르게 의견을 게시하는 것에 대해 유죄라고 생각한다면! 하지만, 매번 Connection 객체 하나만 연결하면된다고 생각했습니다. 실수로 다시 죄송합니다! –

답변

0

당신은해야 : 내 테스트 클래스의 조롱 연결을 만들 연결 풀 (C3P0 또는 Tomcat 연결 풀은 좋은 후보)에서 연결을 가져 오면 ConnectionPool.getConnection() 메서드를 조롱하여 연결 모의를 반환 할 수 있습니다.

@RunWith MockitoJUnitRunner 예제는 @InjectMocks를 테스트 클래스에 어떻게 적용 할 수 있는지 보여줍니다. 여기에 바로 가기가 없습니다 - 방법을 알았지 만 마스터하기에 약간의 시간이 필요하기에 충분히 쉽습니다.