2017-05-08 1 views
0

와 나는 다음과 같은 코드를 가진 클래스에서 테스트를해야합니다. 내가 좋아하는 여러 가지 시도 :Mockito newInstance 메소드

DocumentBuilderFactory docBuilderFactoryMock = Mockito.mock(DocumentBuilderFactory.class);  
Mockito.when(DocumentBuilderFactory.newInstance()).thenReturn(docBuilderFactoryMock); 

하지만 예외 얻을 : 나는 클래스가 볼 다음

DocumentBuilderFactory docBuilderFactoryMock = Mockito.spy(DocumentBuilderFactory.newInstance()); 
DocumentBuilder documentBuilderMock = Mockito.mock(DocumentBuilder.class); 
Mockito.when(docBuilderFactory.newDocumentBuilder()).thenReturn(documentBuilderMock); 
docBuilderdocBuilderMockito.when(docBuilderFactoryMock.newDocumentBuilder()).thenReturn(docBuilderFactoryMock); 

및 디버그 내 코드 :

org.mockito.exceptions.misusing.WrongTypeOfReturnValue: 
DocumentBuilderFactory$$EnhancerByMockitoWithCGLIB$$23223735 cannot be returned by toString() 
toString() should return String 
If you're unsure why you're getting above error read on. 
Due to the nature of the syntax above problem might occur because: 
1. This exception *might* occur in wrongly written multi-threaded tests. 
Please refer to Mockito FAQ on limitations of concurrency testing. 
2. A spy is stubbed using when(spy.foo()).then() syntax. It is safer to stub spies - 
- with doReturn|Throw() family of methods. More in javadocs for Mockito.spy() method. 

나는 다음과 같은 경우를 -under-test는 어디에서든지 내 모의 객체를 사용하지 않지만 자체 객체를 만들고 SAXParseException을 throw합니다.

Document doc = docBuilder.parse(inputSrc); 
+1

Mockito는 정적 방법을 모방 할 수 없습니다. 어쨌든 왜이 수업과 방법을 조롱하고 싶습니까? 문서 작성 방법에 신경 쓰지 않아야합니다. 중요한 것은 입력 문자열을 기반으로 올바른지, 또는 문서에서 메서드가 수행 한 작업이 올바른지, 중요한 부분을 생략했는지 여부입니다. –

+0

다음 작업을 수행하려면 다른 모의 객체가 필요합니다. \t \t Mockito.when (docBuilder.parse (inputSrc)). then return (docMock); – Tiya

+0

'DocumentBuilderFactory.newInstance()'는 정적 메서드입니다. 정적 메소드를 모방하려면 powermock을 사용해야합니다. https://github.com/powermock/powermock/wiki/MockStatic –

답변

0

단위 테스트는 사용되는 라이브러리 구성 요소/클래스가 아니라 구성 요소/클래스를 테스트하기위한 것입니다. 클래스가 문자열을 xml 콘텐츠로 파싱하고이를 테스트하기 위해 알려진 출력이있는 xml 문자열 세트를 제공하는 것이 테스트하는 가장 좋은 방법이라는 것을 알게 될 것입니다. 테스트중인 클래스에 알려진 xml String을 전달하고 구문 분석 된 결과 모델에 해당 xml 내용에 필요한 데이터가 포함되어 있다고 주장하십시오. 나는 조롱이 필요 없다고 생각합니다.