如何使用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
我有以下外部库
是从
取出的<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做点什么......?
答案 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版本,但两者都适用于我。