用于 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();
}
}
我使用 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();
}
}