使用powermock使dropwizard 1.0.5正常工作

时间:2018-02-15 14:11:07

标签: dropwizard powermock powermockito

如何使用dropwizard 1.0.5版使Powermock正常工作。每次遇到不同类型的错误时,我都试图将各种版本的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>

我的测试类就像这个

一样简单
@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

我有以下外部库

Mockito

是从

取出的
<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>

我的图书馆是:

enter image description here

我的测试文件与上面完全相同,然后它完全正常。所以我想它必须与Dropwizard做点什么......?

1 个答案:

答案 0 :(得分:1)

我使用DropWizard和PowerMock创建了一个简单的project,使用Intellij和Maven,使用所有不同版本的PM(1.6.1,1.7.3和1.5.4)成功完成了测试。< / p>

话虽如此,奇怪的是,dropwizard测试工件正在拉动不同版本的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版本,但两者都适用于我。