java - 用于 Stax 解析器的 Junit

标签 java unit-testing junit mockito stax

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

相关文章:

java - 如何使用ListIterator?

java - 继承 - 尝试理解它是如何工作的

java - 如何提高需要加载非常大文件的单元测试的性能

javascript - 如何在 Angular JS 投影上对 window.location 进行单元测试分配?

java - 如何使用 surefire 插件在自定义文件夹结构中运行测试

java - 是否可以在 Java 哈希表中添加没有值的键?

java - Spring MVC - 处理错误并传递给 View 的通用方法

unit-testing - 在构建单元测试项目时,VS 2010 找不到要测试的引用程序集

java - 未捕获或未抛出预期异常?

java - 数据库文件上的 ENOENT(没有此类文件或目录)