我应该使用哪些Maven构件来导入PowerMock?

29

我需要在我的pom.xml中添加哪些依赖项才能让PowerMock与Mockito一起使用?我已经有以下依赖项:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-all</artifactId>
    <version>1.9.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-api-mockito</artifactId>
    <version>1.4.11</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-api-support</artifactId>
    <version>1.4.11</version>
    <scope>test</scope>
 </dependency>

但是当我在类级别上添加@PrepareForTest注释时,Eclipse找不到它,但可以找到PowerMockito。我缺少哪个jar包?


这确实是一个很好的问题,因为对于第一次使用powermock的人来说,虽然jar包被方便地分开了,但并不容易通过maven直接添加。我必须知道从哪个jar包开始! - Deepan Prabhu Babu
4个回答

38
根据PowerMock维基上的Mockito 2 Maven页面,使用以下内容:
<properties>
    <powermock.version>2.0.9</powermock.version>
</properties>
<dependencies>
   <dependency>
      <groupId>org.powermock</groupId>
      <artifactId>powermock-module-junit4</artifactId>
      <version>${powermock.version}</version>
      <scope>test</scope>
   </dependency>
   <dependency>
      <groupId>org.powermock</groupId>
      <artifactId>powermock-api-mockito2</artifactId>
      <version>${powermock.version}</version>
      <scope>test</scope>
   </dependency>
</dependencies>

请务必检查GitHub的发布选项卡中的最新版本号,如果您需要EasyMock、TestNG或者Mockito 1.x(与PowerMock的1.x版本一起使用),请查看入门wiki页面的Maven部分powermock-api-support似乎只是一个“实用类”,您仍然需要在powermock-module-junit4中提供的核心库。

1
我已将powermock-module-juint4 jar添加到类路径中,但仍然看到相同的问题:>>> 此行有多个标记
  • 语法错误,请插入“enum Identifier”以完成EnumHeaderName
  • 语法错误,请插入“EnumBody”以完成EnumDeclaration
  • PrepareForTest无法解析为类型
  • 注释类型PrepareForTest的属性值未定义
- user86834
1
你确定不需要其他依赖项吗?没有代码抛出异常。当我在测试类中添加@PrepareForTest时,Eclipse会抱怨找不到@PrepareForTest。我已经查看了powermock-module-junit4powermock-api-mockito的源代码,但是我找不到@PrepareForTest注释。你能告诉我哪个jar包含版本1.4.11中的@PrepareForTest吗? - user86834
1
@user powermock-core 包含 @PrepareForTest。但是,由于您在问题中可以从 powermock-api-mockito 中追踪相同的传递依赖项,看起来可能是您以某种方式设置了 Eclipse,使得传递的 Maven 依赖项没有被拉入。不过,在弄清楚这一部分之前,我们需要了解一下您的 Eclipse 设置情况。 - Jeff Bowman
2
根据我们拥有的信息,杰夫的答案仍然是正确的。你最终解决了这个问题吗? - Matt Lachman
1
那两个还好,但是文字编辑对我来说太远了——标点符号不正确,TestNG 的细节使得回答更难理解——而且我没有“改进”或“部分接受”按钮,只有“拒绝”。尽管您的编辑已经经过其他审批者的审核,但至少还有一个审查人员因同样的原因而拒绝了您的编辑,您的编辑日志可能显示了完整的文本原因。[当您的编辑改变帖子的意义时,请谨慎处理。] (https://meta.stackexchange.com/q/11474/201031) - Jeff Bowman
显示剩余5条评论

4

请确保您已经添加了这个引用:

import org.powermock.core.classloader.annotations.PrepareForTest;

这个jar包包含以下内容:


1

你正在编写:

    @PrepareForTest(Class.class);

改为:

    @PrepareForTest(Class.class)

我曾经遇到完全相同的问题,并通过这种方式解决了它。


一个好的IDE会在语法错误时提醒你。如果在注释后添加分号(;),Eclipse会抱怨`此行上有多个标记
  • 语法错误,插入“枚举标识符”以完成EnumHeaderName
  • 语法错误,插入“EnumBody”以完成EnumDeclaration`。
- javaPlease42

0

除了您的powermock-module-junit4powermock-api-mockito dependecies之外,还要下载Mockito依赖项zip文件。将这些JAR文件直接添加到您的项目中,它应该可以工作,并相应地配置您的pom。

Power Mockito依赖项-所有Jars


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接