【问题标题】:Junit for stax parserstax 解析器的 Junit
【发布时间】:2017-11-27 10:18:08
【问题描述】:

我使用 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 类型,不返回任何内容)

【问题讨论】:

    标签: java unit-testing junit mockito stax


    【解决方案1】:

    如果可以的话,将这 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();
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-30
      • 2011-08-17
      • 2013-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-17
      相关资源
      最近更新 更多