2017-05-08 11 views
0

と私は、次のコードを持つクラス被試験を持っています。 私のような様々なことを試みた:Mockito newInstanceメソッド

DocumentBuilderFactory docBuilderFactoryMock = Mockito.mock(DocumentBuilderFactory.class);  
Mockito.when(DocumentBuilderFactory.newInstance()).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. 

私は次のような場合:

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

、私のコードをデバッグ、私はクラスのことを見-under-testはどこでも私のMockオブジェクトを使用しませんが、独自のオブジェクトを作成し、SAXParseExceptionをスローします。

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

ユニットテストは、使用されているライブラリコンポーネント/クラスではなく、コンポーネント/クラスをテストすることを目的としています。 クラスがStringをXMLコンテンツとして解析していることをテストするには、既知の出力を持つXML文字列のセットを提供することがテストに最適な方法です。 既知のxml Stringをテスト対象のクラスに渡し、解析される結果のモデルにそのxmlコンテンツに必要なデータが含まれていることを確認します。 私はあなたが嘲笑をする必要はないと思います。

関連する問題