2017-01-17 3 views
1

JUnit과 JMockit을 사용하여 File 오브젝트를 리턴하는 메소드를 테스트하려고합니다. 나는 둘 다 가진 초심자이다.JUnit/JMockit으로 테스트 파일 선택

내가 겪고있는 문제는 제대로 구현 메서드를 조롱하는 방법을 알아낼 수 없다는 것입니다. 실제로는 사용자가 반환 할 파일을 실제로 선택해야하기 때문입니다. 계속해서 오류가 있습니다 :

의견이 있으십니까?

다음
public final class MyClass { 
    public static File OpenFile(Stage stage, String title, String fileTypeText, ArrayList<String> fileType) throws Exception { 
     File file = null; 
     try { 
      FileChooser fileChooser = new FileChooser(); 
      fileChooser.setTitle(title); 
      FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionsFilter(fileTypeText + fileType, fileType); 
      fileChooser.getExtensionsFilters().add(extFilter); 
      file = fileChooser.showOpenDialog(stage); 
      return file; 
     } 
     catc (Exception e) { 
      if(fileType==null) { 
       ... 
      } 
      return file; 
     } 
    } 
} 

내 시도 JUnit 테스트의 재현입니다 :

@Test 
public void TestOpenFile(@Mocked Stage stage) throws Exception { 

    final ArrayList<String> extensions = new ArrayList<String>(); 
    extensions.add(".txt"); 

    final File file = null; 

    new Expectations() {{ 
     MyClass.OpenFile(stage, anyString, anyString, extensions); returns(file); 
    }}; 

    assertEquals(file, MyClass.OpenFile(stage, "some title", "some type", extensions)); 

} 

답변

0

내가 처음에 잘못이 문제에 접근하는 것을 실현 여기에

내 구현의 레크 리 에이션이다. 이 문제를 해결하기 위해 수행 한 작업은 다음과 같습니다.

테스트 용도를 벗어난 파일을 반환하기 위해 내 자신의 메서드를 모의하지 않고 FileChooser.showOpenDialog 메서드를 조롱하여 파일을 반환합니다.

final File expectedFile = new File("abc"); 

    new MockUp<FileChooser>() { 

     @Mock 
     File showOpenDialog(final Window overWindow) { 
      return expectedFile; 
     } 
    }; 

    final File actualFile = MyClass.OpenFile(...); 

    assertEquals(expectedFile, actualFile); 
+0

당신은 올바른 해결책 자신을 발견 이해하고 (내 개인적인 취향)을 작성하는이 쉽게 찾을 수 있습니다. 모의 협업 객체, 테스트중인 코드가 아님 (다른 테스트 시나리오에서이 코드를 조롱 할 수 있음). –

1

귀하의 솔루션은 정확하지만 내가 대신 기대를 사용합니다 :

public void TestOpenFile(@Mocked FileChooser chooser) throws Exception{ 

    new Expectations() { 
     { 
      chooser.showOpenDialog(stage); result = expectedFile; 
     }}; 


final File actualFile = MyClass.OpenFile(...); 

assertEquals(expectedFile, actualFile);} 

내가