gpt4 book ai didi

java - 用于 Stax 解析器的 Junit

转载 作者:行者123 更新时间:2023-12-02 11:57:23 25 4
gpt4 key购买 nike

我使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com