Java 用于stax解析器的Junit

Java 用于stax解析器的Junit,java,unit-testing,junit,mockito,stax,Java,Unit Testing,Junit,Mockito,Stax,我使用StAX解析器完成了XML解析。现在我需要编写JUnit测试用例来解析XML。如何为这种情况编写JUnit?我有这样的代码 while( streamReader.hasNext() ) { switch( streamReader.next() ) { case XMLStreamConstants.START_ELEMENT: writeStartEl

我使用StAX解析器完成了XML解析。现在我需要编写JUnit测试用例来解析XML。如何为这种情况编写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;
            }
        }

现在我有三个方法
writeStartElement()
用于StartElement,
writeEndElements()
用于endElement和
writeCharacters()
用于字符,现在我想为每个方法编写测试用例(所有方法都是void类型,不返回任何内容)

如果可以,将这三个方法提取到一个专门的类中,编写器,然后用作依赖项。然后利用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();
   }
}