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