尝试在Maven项目中使用PowerMockRule运行Arquillian测试,以便能够模拟静态类。
但是,当我构建maven项目时,我在测试中遇到以下错误:
错误测试: myTest(com.package.myTest):无法调用java.util.concurrent.ConcurrentHashMap.readObject():没有字段' segmentmask'在课程中找到' java.util.concurrent.ConcurrentHashMap'
我不知道这个的原因以及如何解决它。任何建议将不胜感激,谢谢。
编辑:显然问题是由使用PowerMockRule时需要的XStream类加载器引起的。但我还没有找到解决办法。
答案 0 :(得分:4)
这确实是由x-stream问题引起的(在1.4.8中修复): http://x-stream.github.io/jira/761/
因此,如果您使用maven进行依赖关系管理,您可能希望在依赖关系管理中执行类似的操作:
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-classloading-xstream</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Should be removed as soon as xstream is updated in powermock -->
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.8</version>
<scope>test</scope>
</dependency>
然后你在哪里使用powermock:
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-classloading-xstream</artifactId>
<scope>test</scope>
</dependency>
<!-- Should be removed as soon as powermock has the latest version of xstream -->
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<scope>test</scope>
</dependency>
至少,直到powermock开始使用新的x-stream版本。