使 dropwizard 1.0.5 与 Powermock 一起工作

Making dropwizard 1.0.5 work with Powermock

如何让 Powermock 与 dropwizard 版本 1.0.5 一起工作。每次出现不同类型的错误时,我都尝试将各种版本的 powermock 包含到我的项目中。

例如当我使用:

<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-module-junit4</artifactId>
    <version>1.6.1</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-api-mockito</artifactId>
    <version>1.6.1</version>
    <scope>test</scope>
</dependency>

我得到:

    java.lang.AbstractMethodError: org.powermock.api.mockito.internal.mockmaker.PowerMockMaker.isTypeMockable(Ljava/lang/Class;)Lorg/mockito/plugins/MockMaker$TypeMockability;

        at org.mockito.internal.util.MockUtil.typeMockabilityOf(MockUtil.java:26)

使用版本 1.5.4 给我:

org.powermock.reflect.exceptions.FieldNotFoundException: Field 'fTestClass' was not found in class org.junit.internal.runners.MethodValidator.

我什至尝试过使用版本 1.7.3<artifactId>powermock-api-mockito2</artifactId>

我的测试class就这么简单

@RunWith(PowerMockRunner.class)
@PrepareForTest(MyStaticMethodClass.class)
public class TestStaticMethods {

    @Test
    public void testMyStatic() {
        PowerMockito.mockStatic(MyStaticMethodClass.class);
        Mockito.when(MyStaticMethodClass.getString()).thenReturn("Hello World");

        String result = MyStaticMethodClass.getString();

        Assert.assertEquals("Helo World", result);
    }

}

我查看了 powermock 的文档,我的 junit 版本是 4.12 https://github.com/powermock/powermock/wiki/Mockito-Maven

我有以下外部库

它们是从

中提取的吗
<dependency>
    <groupId>io.dropwizard</groupId>
    <artifactId>dropwizard-testing</artifactId>
    <scope>test</scope>
</dependency>

试图排除它们,但它们没有消失我正在使用 Intellij 作为我的 IDE。 是不是因为这些库导致测试环境的初始化有一些冲突?

编辑 1

好的,所以我尝试创建一个小的 java 项目,只包含以下依赖项:

<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-module-junit4</artifactId>
    <version>1.7.3</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-api-mockito</artifactId>
    <version>1.7.3</version>
    <scope>test</scope>
</dependency>

我的图书馆是:

而我的测试文件和上面的完全一样,那么它就完美无缺了。所以我想它必须与 Dropwizard 做些什么...?

我使用 DropWizard 和 PowerMock 创建了一个简单的 project,并且使用 Intellij 和 Maven 的所有不同版本的 PM(1.6.1、1.7.3 和 1.5.4)成功执行了测试.

话虽如此,但奇怪的是 dropwizard-testing 神器正在拉取不同版本的 mockito(1.10.8 为所有版本,2.0.54-beta 为核心版本)。您可以从 dropwizard-testing 工件中排除 mockito-core 依赖项,这至少会确保 mockito 的版本没有冲突。

<dependency>
    <groupId>io.dropwizard</groupId>
    <artifactId>dropwizard-testing</artifactId>
    <version>${dropwizard.version}</version>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

我还测试了 DW 的 1.1.7 和 1.2.4 版本,但对我来说都很好。