Junit测试错误:没有字段' segmentmask'在课程中找到' java.util.concurrent.ConcurrentHashMap'

时间:2015-05-13 08:31:51

标签: maven junit powermock xstream jboss-arquillian

尝试在Maven项目中使用PowerMockRule运行Arquillian测试,以便能够模拟静态类。

但是,当我构建maven项目时,我在测试中遇到以下错误:

错误测试:     myTest(com.package.myTest):无法调用java.util.concurrent.ConcurrentHashMap.readObject():没有字段' segmentmask'在课程中找到' java.util.concurrent.ConcurrentHashMap'

我不知道这个的原因以及如何解决它。任何建议将不胜感激,谢谢。

编辑:显然问题是由使用PowerMockRule时需要的XStream类加载器引起的。但我还没有找到解决办法。

1 个答案:

答案 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版本。