使用InputStream的单元测试在IntelliJ中传递但在Maven中失败

时间:2017-11-29 12:19:03

标签: xml maven unit-testing junit inputstream

我正在测试一个验证InputStream的XML内容的类。 所以我根据我想要的断言传递各种XML字符串。

奇怪的是,当我从我的测试类运行测试时,它们都会通过。当我运行测试通过Maven (安装或测试命令是相同的)时,断言是错误的,因为它们总是返回一个空字符串(我想获取错误字符串:如果XML是空的如果输入中的XML没有根据我的具体项目的标准很好地形成,那么就会形成错误的描述。

这里我附上一个测试示例,如果从test class命令运行则通过,并在使用maven test命令执行时失败:

@Test
public void NumeroTagDifformeListaProcessi() throws IOException {
    InputStream inputStream = IOUtils.toInputStream("<?xml version='1.0' encoding='UTF-8'?><RequestModel><codiceProdotto>GFDT4536</codiceProdotto><numeroPolizza>12345</numeroPolizza><numeroPropComp>5463</numeroPropComp></RequestModel>", "UTF-8");
    assertEquals("Il numero dei tag non corrisponde al modello. Il tag banca e' mancante nella richiesta. ", RequestValidator.validate(inputStream, RequestModel.class, "requestmodel"));
}

这是Maven返回的错误:

Failed tests: 
RequestValidatorTest.NumeroTagDifformeListaProcessi:42 expected:<[Il numero dei tag non corrisponde al modello. Il tag banca e' mancante nella richiesta. ]> but was:<[]>

1 个答案:

答案 0 :(得分:1)

您的问题是由于单元测试冲突造成的。

这有多种原因:

  • 不当使用全局应用程序缓存

    有时候,多个单元测试可能会访问同一个缓存,如果这个类没有记住正确的线程安全性,这会导致冲突

  • 不当使用静态变量

    如果测试中的方法使用静态变量,但从不在方法本身内重置它们(而不是在构造类时重置(初始化)它们),这将导致问题。

  • 文件/类/方法排序

    不同的测试运行者可以以不同的顺序执行测试,即使在同一平台上,Windows上的大多数工具都按字母顺序执行测试,但有些按{Her> aAb.YzZ的顺序执行,abc...XYZ的其他工具执行测试。 },这甚至可以扩展到类文件的实际方法(java文件方法顺序,类文件方法顺序,甚至字母顺序)

  • 垃圾收集公开的竞争条件

    某些代码可能容易受到竞争条件的影响,如果垃圾收集在单元测试期间启动,它可能会将其推得足够远以导致错误(或隐藏错误)