我正在测试一个验证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:<[]>
答案 0 :(得分:1)
您的问题是由于单元测试冲突造成的。
这有多种原因:
不当使用全局应用程序缓存
有时候,多个单元测试可能会访问同一个缓存,如果这个类没有记住正确的线程安全性,这会导致冲突
不当使用静态变量
如果测试中的方法使用静态变量,但从不在方法本身内重置它们(而不是在构造类时重置(初始化)它们),这将导致问题。
文件/类/方法排序
不同的测试运行者可以以不同的顺序执行测试,即使在同一平台上,Windows上的大多数工具都按字母顺序执行测试,但有些按{Her> aAb.YzZ
的顺序执行,abc...XYZ
的其他工具执行测试。 },这甚至可以扩展到类文件的实际方法(java文件方法顺序,类文件方法顺序,甚至字母顺序)
垃圾收集公开的竞争条件
某些代码可能容易受到竞争条件的影响,如果垃圾收集在单元测试期间启动,它可能会将其推得足够远以导致错误(或隐藏错误)