2012-04-18 2 views
0

저는 프로그래밍 응용 프로그램입니다. 테스트하기 위해 파일 모의이 필요합니다. 아래에 내 코드 :EasyMock and File in Java

@Test 
public void testPostMail() throws Exception 
{ 
    Emailer instance = new Emailer(); 
    instance.setRecipientsFromFile(new File("list.txt")); 
} 

문제는, 내 하드 디스크의 파일에 의존하고 싶지 않아 (물론 나는 적절한 내용으로 파일을 만들고 테스트 후 삭제,하지만 난 할 수 있습니다 EasyMock으로 할 수 있습니다.) ,

1) 나는 아직도 오류가

2) classextension.EasyMock이되지 않습니다 "파일 인터페이스 아니다"

나는 그것을 org.easymock.classextension.EasyMock를 가져 와서 사용하려고하지만,

@Test 
public void testSetReceipientsFromFile() throws Exception 
{ 
File file = EasyMock.createMock(File.class); 
FileReader in = EasyMock.createMock(FileReader.class); 
BufferedReader br = EasyMock.createMock(BufferedReader.class); 

EasyMock.expect(new FileReader(file)).andReturn(in); 
EasyMock.expect(new BufferedReader(in)).andReturn(br); 

EasyMock.expect(br.readLine()).andReturn("[email protected]"); 
EasyMock.expect(br.readLine()).andReturn("[email protected]"); 

EasyMock.replay(file, in, br); 

EasyMock.verify(file, in, br); 

// ... 
} 

편집 : 그래서 난 그냥 EasyMock에

내 작동하지 EasyMock에 코드를 사용해야합니다 내가 들어 있기 때문에 내가 Mockito로 EasyMock에에서 변경 궁금하네요 더 호의적 인 의견.

+2

EasyMock에 묶여 있지 않다면 Mockito를 사용하십시오. 그것은 콘크리트 수업을 모의 수 있습니다. –

+0

왜 널리 사용되는 API를 테스트하려고합니까? 그것은 틀림없이 잘 작동합니다. 코드를 테스트해야합니다. –

+0

가능한 [easockock을 사용하여 구체적인 클래스 조롱] (http://stackoverflow.com/questions/1249317/mocking-a-concrete-class-using-easymock) –

답변

1

EasyMock과 Mockito는 객체 조롱을 지원하지 않습니다. 따라서 PowerMock 또는 PowerMockito와 같이이를 지원하는 라이브러리가 필요합니다.

그러나 여기에는 디자인 결함이 있다고 생각합니다. 파일을 읽는 것은 Emailer의 책임입니까? 나는 그렇게 생각하지 않는다.

Emailer에서 파일을받는 코드를 추출하여 파일에서 수신자 목록을 읽는 책임이있는 새 클래스로 만들었습니다. Emailer을 더 테스트 할 수 있습니다. 새 클래스를 테스트하려는 경우 파일을 읽는 것이 해당 클래스의 주요 책임이므로 실제 파일 (TemporaryFolder rule 사용)을 만드는 것은 자연스러운 선택입니다. Mockito에서

1

당신은 이런 식으로 그것을 : 사용중인 EasyMock에 어떤 버전의

BufferedReader br = Mockito.mock(BufferedReader.class); 

    Mockito.when(br.readLine()) 
      .thenReturn("[email protected]") 
      .thenReturn("[email protected]"); 

    // Alternative 
    // Mockito.when(br.readLine()).thenReturn("aaa", "bbb"); 

    Assert.assertEquals("[email protected]", br.readLine()); 
    Assert.assertEquals("[email protected]", br.readLine()); 
0

"테스트 듣기". File 주위에 래퍼를 만들고 Emailer에 사용해야합니다.

0

EasyMock 3.0 (현재 버전은 3.2)에서 콘크리트 클래스를 모의 할 수 있으므로 지금이 오류가 발생하지 않습니다.