junit5とMockitoを使用してstaticメソッドのモック化をしようとした際に、junit4やPowerMockitoを使用した情報やMockitoのバージョンによるエラーで詰まったので記録します。
pom.xml
pom.xml
...
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>11</java.version>
<mockito.version>4.4.0</mockito.version>
</properties>
...
<dependencies>
<!-- mockito -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>${mockito.version}</version>
<scope>test</scope>
</dependency>
<!-- mockStaticで使用 -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-inline</artifactId>
<version>${mockito.version}</version>
</dependency>
<!-- junit5を含む -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
今回はmockito-core
とmockito-inline
のバージョンを4.4.0
に揃えていますが、4.5.*
や4.6.*
にあげるとこちらにあるようなエラーが出てしまってうまくいきませんでした。
https://github.com/mockito/mockito/issues/2629
モック対象メソッド
public class Sample {
public static boolean doSomething() {
return false;
}
}
Test
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import ...Sample;
public class SampleTest {
@Test
public void test() {
try (MockedStatic<Sample> mock = Mockito.mockStatic(Sample.class)) {
Mockito.when(mock.doSomething()).thenReturn(true);
Assertions.assertEquals(true, mock.doSomething());
}
}
}
MockedStatic
クラスはcloseする必要があるためtry-with-resource文にしています。
junit4のアノテーションやPowerMockitoが混在しているとエラーが起きたため、統一した書き方をする必要がありそうです。