我使用JUnit 4 / Mockito / PowerMock作为遗留应用程序的单元测试套件。 PowerMock依赖于javassist:org.javassist:javassist:jar:3.20.0-GA:test
我们还依赖于旧版本的Hibernate,它引入了旧版本的javassist:javassist:javassist:jar:3.12.0.GA:compile
旧版本的javassist混淆了单元测试,导致了一个神秘的异常:java.io.IOException: invalid constant type: 18
当直接通过Maven运行测试时,我能够通过从POM中的单元测试运行中排除旧jar来解决问题。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<classpathDependencyExcludes>
<!-- our version of Hibernate pulls in a javassist dependency that is incompatible with Java8
this can be removed once we upgrade Hibernate -->
<classpathDependencyExclude>javassist:javassist</classpathDependencyExclude>
</classpathDependencyExcludes>
</configuration>
</plugin>
但是,在IntelliJ中直接运行测试时,仍会出现错误。这是一个无法从IDE轻松调试测试的主要问题,所以我很高兴有一些方法可以让IntelliJ排除旧的依赖,直到我们最终可以升级我们的Hibernate依赖