2017-11-27 15 views
0

StAX 파서를 사용하여 XML 구문 분석을 수행했습니다. 이제 XML을 파싱하기위한 JUnit 테스트 사례를 작성해야합니다. JUnit을 이러한 상황에 어떻게 작성합니까? 나는이 코드stax 파서에 대한 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에 대한 writeStartElement(),하는 endElement에 대한 writeEndElements()writeCharacters() 문자 지금은 (모든 방법이 아무것도 돌려주지 않는, 무효 타입)

각 방법에 대한 테스트 케이스를 작성하려는이 같은

답변

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(); 
    } 
}