Mockito.when一个被static修饰的方法怎么写
时间: 2024-01-26 21:01:55 浏览: 71
Java static修饰方法
Mockito 默认不支持模拟静态方法,但是可以使用第三方库 PowerMockito 来模拟静态方法。下面是一个例子:
假设有一个类 `StringUtil`,其中有一个静态方法 `isEmpty`,我们需要对其进行模拟:
```
public class StringUtil {
public static boolean isEmpty(String str) {
return str == null || str.isEmpty();
}
}
```
使用 PowerMockito 可以这样模拟:
```
@RunWith(PowerMockRunner.class)
@PrepareForTest(StringUtil.class)
public class StringUtilTest {
@Test
public void testIsEmpty() {
PowerMockito.mockStatic(StringUtil.class); // mock 静态方法
Mockito.when(StringUtil.isEmpty(Mockito.anyString())).thenReturn(true); // 模拟静态方法的行为
Assert.assertTrue(StringUtil.isEmpty(null));
Assert.assertTrue(StringUtil.isEmpty(""));
Assert.assertTrue(StringUtil.isEmpty(" "));
Assert.assertFalse(StringUtil.isEmpty("abc"));
}
}
```
在上面的代码中,我们使用了 `@RunWith(PowerMockRunner.class)` 和 `@PrepareForTest(StringUtil.class)` 来启用 PowerMockito 的静态方法模拟功能,并指定要模拟的类。然后使用 `PowerMockito.mockStatic(StringUtil.class)` 来 mock 静态方法,最后使用 `Mockito.when` 来模拟静态方法的行为。
需要注意的是,使用 PowerMockito 进行静态方法模拟需要添加相应的依赖,否则会报 NoClassDefFoundError 错误。例如,使用 Maven 的项目需要添加以下依赖:
```
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>2.0.9</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito2</artifactId>
<version>2.0.9</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-core</artifactId>
<version>2.0.9</version>
<scope>test</scope>
</dependency>
```
阅读全文