概述
从Mockito的3.4版开始,可以模拟静态方法。
如果您只想模拟静态方法,则无需安装PowerMock。
环境
- mockito-core-3.4.0.jar
- byte-buddy-1.10.16.jar
除上述jar外,还需要新的
--mockito-inline-3.4.0.jar
--byte-buddy-agent-1.10.16.jar
每个都可以从Mockito官方网站ByteBuddy官方网站下载。
<表格>
tr>
header>
<身体>
tr>
tr>
tbody>
table>
样本代码
类被嘲笑
包含
静态方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class MockedClass { public static String methodA() { return "val1"; } public static String methodB() { return "val2"; } public static String methodC(String str) { return str; } } |
测试等级
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public class MockedClassTest { @Test public void test() throws Exception { // 期待値 String expected_methodA = "test"; String expected_methodB = "val2"; // 対象クラスのモック化 MockedStatic<MockedClass> mocked = Mockito.mockStatic(MockedClass.class); // 戻り値を設定してスタブ化 mocked.when(MockedClass::methodA).thenReturn(expected_methodA); // スタブ化しない場合 mocked.when(MockedClass::methodB).thenCallRealMethod(); // 実行 String actual_methodA = MockedClass.methodA(); String actual_methodB = MockedClass.methodB(); // 結果確認 assertEquals(expected_methodA, actual_methodA); assertEquals(expected_methodB, actual_methodB); } } |
模拟
您可以使用。
如何指定静态方法
在
示例代码中,它是由
1 2 | mocked.when(() -> { MockedClass.methodC(Mockito.anyString()); }) .thenReturn("stub"); |
您可以在
参数列表中指定Mockito的any()。
当然,即使没有参数,使用lambda表达式编写也是有效的。
{}根据lambda表达式描述规则可以省略。
1 2 | mocked.when(() -> MockedClass.methodA()) .thenReturn("stub"); |