현재 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);
프로그램의 메인 클래스에서'Connection' 객체를 만드는 것이 더 좋습니다. 모든 클래스의 methods()에서 'Connection Class의 인스턴스를 반환하는 Main Class의 메소드 호출'을 사용합니다. –
이 메소드는 여전히'getConnection()'과 같은 메소드를 호출하여 연결을 설정해야합니다. 나는 당신이 무엇을 제안하고 있는지, 왜 도움이 될지 잘 모르겠습니다. – DanGordon
사실 나는 '조롱'이란 무엇을 의미하는지에 대한 귀하의 성명을 이해하지 못했습니까? 미안하지만, 당신이 내가 모르게 의견을 게시하는 것에 대해 유죄라고 생각한다면! 하지만, 매번 Connection 객체 하나만 연결하면된다고 생각했습니다. 실수로 다시 죄송합니다! –