我使用 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类型,不返回任何内容)
最佳答案
如果可以的话,将这 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();
}
}
关于java - 用于 Stax 解析器的 Junit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47508543/