2017-11-27 6 views
0

StAXパーサーを使ってXMLを解析しました。今度は、XMLを解析するためのJUnitテストケースを作成する必要があります。 JUnitをそのような状況に書き込む方法は?私はスタックスパーサー用Junit

while(streamReader.hasNext()) 
     { 
      switch(streamReader.next()) 
      { 
       case XMLStreamConstants.START_ELEMENT: 
        writeStartElement(); 
        break; 
       case XMLStreamConstants.END_ELEMENT: 
        writeEndElements(); 
        break; 
       case XMLStreamConstants.CHARACTERS: 
        writeCharacters(); 
        break; 
       default: 
        break; 
      } 
     } 

ようなコード今、私はstartElementsための3つの方法writeStartElement()、文字のためのendElementためwriteEndElements()writeCharacters()を持っているし、今私は、各メソッドのテストケースを書きたい(すべてのメソッドはvoid型です、何も返さない)

を持っています

答えて

1

可能であれば、これらの3つのメソッドを特殊なクラスのライターに抽出して、依存関係として使用します。そして、あなたは適切な行動を依存関係を模擬し、確認するためにMockitoのようなツールを活用する:

1)リファクタリング:

// the field dependency 
    private Writer writer; 

    .... 

    switch(streamReader.next()) 
     { 
      case XMLStreamConstants.START_ELEMENT: 
       writer.writeStartElement(); 
       break; 
      case XMLStreamConstants.END_ELEMENT: 
       writer.writeEndElements(); 
       break; 
      case XMLStreamConstants.CHARACTERS: 
       writer.writeCharacters(); 
       break; 
      default: 
       break; 
     } 

2)テスト

public class MyTestClass{ 

    @Mock 
    private Writer writerMock; 

    @Mock 
    private StreamReader streamStub; 

    @InjectMocks 
    public ClassUnderTest testClass; 

    @Before 
    public void init(){ 
     MockitoAnnotations.initMocks(this); 
    } 

    // one of three test cases 
    @Test 
    public void test_START_ELEMENT(){ 
     // Arrange 
     Mockito.when(streamStub.hasNext()).thenReturn(true).thenReturn(false); 
     Mockito.when(streamStub.next()).thenReturn(XMLStreamConstants.START_ELEMENT); 

     // Act 
     testClass.readStream(streamStub); 

     // Assert 
     Mockito.verify(times(1), writerMock).writeStartElement(); 
    } 
}