2014-06-19 4 views
2

정적 메소드를 모방하는 방법, 특히 정적 Files.class에서 모의하려고합니다.Mockito를 사용하여 java.nio.file.Files 정적 메소드를 모의 사용하십시오.

기본적으로,이 라인은 실행 할 때마다 : 나는 단지의 InputStream의 인스턴스 인 객체를 반환 할

Files.newInputStream(this.getPathObj(), StandardOpenOption.READ); 

.

나는 모의하려고하는 정적 메서드를 사용하는 클래스입니다.

public class JavaFileInput{ 

private Path path; 

public JavaFileInput(Path path){ 
    this.path = path; 
} 

public InputStream getInputStream() throws IOException { 
    return Files.newInputStream(this.getPathObj(), StandardOpenOption.READ); 
} 

public Path getPathObj() { 
    return this.path; 
} 

} 

이 분명히 작동하지 않는 일부 "사이비 틱"단위 테스트 코드입니다,하지만 난 그것이 내가 달성하기 위해 노력하고있어의 아이디어를 묘사 바랍니다.

@Mock(name="path") 
private Path mockedPath = Mockito.mock(Path.class); 

@InjectMocks 
private JavaFileInput javaFile_MockedPath; 

@Before 
public void testSetup(){ 
    javaFile_MockedPath = new JavaFileInput(mockedPath); 
    MockitoAnnotations.initMocks(this); 
} 

@Test 
public void getNewInputStreamTest(){ 
    //Setup 
    Mockito.when(Files.newInputStream(mockedPathObj, StandardOpenOption.Read)).thenReturn(new InputStream()); 

    //Test 
    InputStream outputValue = javaFile_MockedPath.getInputStream(); 

    //Validate 
    assertTrue(outputValue instanceof InputStream); 

} 

이것은 의미가 있습니까? 누구도 비슷한 것을해야만 한 적이 있습니까? 어떤 도움이라도 대단히 감사하겠습니다.

시간 내 주셔서 감사합니다.

+0

PowerMock을 살펴볼 수 있습니다. – chrylis

답변

1

귀하의 JavaFileInput에서 제공하는 가치가 명확하지 않습니다. 그러나 정적 메서드를 테스트하려면 PowerMock을 참조하십시오.

+0

Romski - 답변 해 주셔서 감사합니다. PowerMock을 사용해 보겠습니다. 그 도구를 추천하는 그물 주위에 다른 많은 것들을 보았습니다. – Chiefwarpaint

-1

표준 Mockito를 사용하면 정적 방법을 모방 할 수 없으며 그 이유를 묻습니다.

newInputStream 방법을 조롱하여 무엇을 테스트하려고합니까? 당신은 단순히 동어 반복을 만들었을뿐입니다 - 당신의 방법은 당신이 그것을 말하도록했던 것을 되돌려줍니다. 그리고 instanceof InputStream은 동어 반복이다.

JavaFileInput을 모의 해 (예를 들어 ByteArrayInputStream 샘플 데이터를 사용하여) 다른 클래스를 테스트하는 것이 더 합리적 일 것입니다.

+0

Tom G - 신속한 응답에 감사드립니다! 나는 getInputStream()이 InputStream 인스턴스를 리턴 하는지를 테스트하기를 원한다고 생각한다. 나는 다른 것을 시험해야합니까? 사실, Files.exists()와 Files.isDirectory() 등 내가 조롱하길 원하는 Files.class의 정적 메서드가 실제로 많이 있습니다. 다른 것들을 시도하기 전에이 테스트를 처리하는 방법을 알아 내려하고 싶었습니다. . – Chiefwarpaint

관련 문제