使 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 版本,但对我来说都很好。
如何让 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 版本,但对我来说都很好。