当尝试在JUnit中使用PowerMock时,遇到了IllegalAccessError
首先
我在JUnit测试中想要使用PowerMock并尝试引入它,但遇到了错误,所以我将总结解决方法。
病征
// Fooのテスト
public class FooTest {
@Test
public void testFoo() {
// Mockを作成
Bar bar = mock(Bar.class);
// いろいろなテスト
}
}
在引入PowerMock之前,我写了这样的测试代码,它正常运行。
当我在pom.xml中添加了PowerMock后,在运行测试时发生了以下错误。
java.lang.IllegalAccessError: class org.mockito.internal.creation.jmock.ClassImposterizer$1 cannot access its superclass org.mockito.internal.creation.cglib.MockitoNamingPolicy
在pom.xml文件中,下面是可能相关的部分。
<dependencies>
<!-- Spring Boot Starter Test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Powermock -->
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>1.5.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>1.5.4</version>
<scope>test</scope>
</dependency>
<!-- その他外部ライブラリ -->
</dependencies>
进行分析
我尝试通过谷歌搜索找到了这条问答信息,对于我的问题有所参考。
stackoverflow – 初始化时Junit Mockito出现错误
根据这里的信息,spring-boot-starter-test 1.4.2.RELEASE默认使用Mockito 1.10.19,而1.10.19版本中没有org.mockito.internal.creation.jmock.ClassImposterizer。
在我的环境中,我使用的是 spring-boot-starter-test 1.5.14.RELEASE,并且在检查 Maven 依赖关系时,我也发现了使用了Mockito 1.10.19。
听说1.9.5版本中包含有org.mockito.internal.creation.jmock.ClassImposterizer。
解决方法 fǎ)
将pom.xml文件修改如下。
<dependencies>
<!-- Spring Boot Starter Test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<!-- Mockitoを除外 -->
<exclusions>
<exclusion>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Mockitoを追加 -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>1.9.5</version>
<scope>test</scope>
</dependency>
<!-- Powermock -->
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>1.5.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>1.5.4</version>
<scope>test</scope>
</dependency>
<!-- その他外部ライブラリ -->
</dependencies>
这样就不会再出现错误了。
最后
有一个易于理解的问答,非常有帮助。