用于 stax 解析器的 Junit

Junit for stax parser

我使用 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() 用于 startElements,writeEndElements() 用于 endElement 和 writeCharacters() 用于字符,现在我想为每个方法编写测试用例(所有方法都是 void 类型, return 没有)

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