我的相关pom部分如下:
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12</version>
<configuration>
<forkMode>always</forkMode>
</configuration>
</plugin>
</plugins>
</build>
我有一个maven项目,当我在Eclipse中通过单击“src / test / java” - &gt;执行它们时,我可以成功运行所有单元测试“run as” - &gt; “Junit测试”。但是,当我在Windows 10上的命令行使用“mvn clean install”运行它们时,大多数单元测试都会失败。
奇怪的是,同样的项目我可以在我的Ubuntu机器上的命令行中使用“mvn clean install”运行所有单元测试。
使用“mvn clean install”在Windows机器上导致此问题的独特之处是什么?
编辑: 我找到了问题的根源,但无法理解为什么?
通过加载文本文件初始化类时测试失败,并且在文件的此特定条目处失败:
♥|+|love
加载文件时,每行都会被以下代码解析和验证:
String[] entry = line.split("\\|");
if (entry.length != 3) {
log.error(String.format("Invalid line: %s in %s " + line, filePath));
}
然后'entry'应该由3个元素组成:{“♥”,“+”,“love”}。这表示在Eclipse Windows或Ubuntu机器上运行时解析是正确的,但在Windows上的命令行中运行时失败。
现在的问题是,为什么在解析或断言这个条件时会失败?我怀疑这是由于编码。可能是这样的情况,当在Windows上的终端上运行时,心脏符号可能会遇到编码问题,但是,在我的pom.xml中,我有这一行:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
所以我很困惑为什么会这样。好消息是我现在发现了问题所在。