2014-12-05 5 views
0

JMockit을 사용하여 개인 메서드를 조롱하려고합니다. 튜토리얼을 통해 작업 해 왔으며 값을 반환하지 않는 개인 메서드를 조롱 할 수 있습니다. 이 특정 메서드는 데이터베이스와 상호 작용하며 아무 것도 반환하지 않습니다. 이 테스트의 목적 상,이 메소드를 효과적으로 마스크하는 것입니다. 사용하고있는 테스트 형식은 아래에 나와 있습니다. 일반적으로 캡슐화 해제 메소드가 호출 된 직후에 결과가 나타납니다.JMockit, 반환하지 않고 private 메서드를 조롱하려면 어떻게해야합니까?

@Test 
public void testRetrieveAndSaveReport() { 

    //Make class with private class final, to be used in the Exceptionsinners class 
    final ESReportOutputLogic eSReportOutputLogic = new ESReportOutputLogic(); 

    // Define Expectations 
    // pass eSReportOutputLogic as argument to make it a Mocked type in the Exceptions Class 
    new Expectations(eSReportOutputLogic){ 
     ESReportOutputLogic eSReportOutputLogic; 
     { 
      Deepcapsulation.invoke(eSReportOutputLogic); 

     } 
    }; 

    ESReportOutputLogic rol = new ESReportOutputLogic(); 
    rol.retrieveAndSaveReport("","",1); 

    // asserts..... 
} 
+0

개인적인 방법이므로 일부 값을 반환하는 메서드의 서명을 변경할 수 없습니까? 이 경우 데이터베이스 작업이 성공하면 0을 반환하고 그렇지 않으면 1을 반환합니다. 호출 메서드에 대한 작업 결과를 전달하지 않는 개인 메서드는 생각하기가 어렵습니다. 반환 값 또는 예외 예외가 될 수 있습니다. – Gaurav

답변

1

어떤 추상화를 사용하여 데이터베이스와 상호 작용하고 있습니까?

테스트의 관점에서 무언가를 조롱하려고 시도하지 말고 조롱하는 것이 좋습니다. should not exist.

개인 방법을 조롱한다는 것은 테스트를 통해 응용 프로그램의 코드를 효과적으로 남겨두고 있음을 의미합니다.

+0

감사합니다. [rol.retrieveAndSaveReport ("", "", 1)이 (가) 데이터베이스와 상호 작용합니다.] 나는 처음에 그 일을 할 때 이것에서 벗어났다. 그리고 지금 나는 그 문제로 돌아가는 길을 생각할 수있다. 가장 간단한 방법은 System-rules API를 사용하는 것입니다. ExpectedSystemExit() 및 expectSystemExitWithStatus (int) 메서드가 있습니다. 이 기능을 사용하고자하는 사람은 JUnit을 사용하려면 올바른 JUnit 버전을 가져와야합니다. –