JAVA

PowerMockitoでstaticなメソッドをMock化する

转载:https://qiita.com/morinco/items/a41cc7685be75a2f6e08

PowerMockを使用する


mockitoでstaticメソッドはMock化できないのでPowerMockを使用する。

更新:首先需要确认下mockito是可以进行静态方法的Mock的操作的,在网上看了很多的帖子都说需要集成PowerMockito才可以Mock静态方法,确实通过PowerMockito可以完成静态方法,但是在版本3.4.0中,Mockito现在支持Mock静态方法。可以参照:http://123.57.164.21/?p=6457

本文主要是介绍PowerMock来Mock静态方法

ソース


テスト対象クラス

public class MoriUtilA {
    public static String getMoriString(String inStr){
        return "あなたは" + MoriUtilB.isMoriorHayashi(inStr) + "です";
    }
}

モック化するクラス

public class MoriUtilB {
    public static String isMoriorHayashi(String inStr){
        // 入力値が「もり」なら「森」を、それ以外なら「林」を返す
        return "";// 未作成
    }
}

インポート文

import static org.powermock.api.mockito.PowerMockito.when;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import static org.junit.Assert.*;
import static org.mockito.Matchers.*;

テストクラス

@RunWith(PowerMockRunner.class)
@PrepareForTest({MoriUtilB.class})
public class MoriUtilATest {
    @Before
    public void setUp() throws Exception {
        // MoriUtilBをモック
        PowerMockito.mockStatic(MoriUtilB.class);
    }
    @Test
    public void mockTestMori() {
        // モックの返却値を設定
        when(MoriUtilB.isMoriorHayashi("もり")).thenReturn("森");
        // 実施
        String actual = MoriUtilA.getMoriString("もり");
        assertEquals("あなたは森です", actual);
    }
    @Test
    public void mockTestHayashi() {
        // モックの返却値を設定
        when(MoriUtilB.isMoriorHayashi(anyString())).thenReturn("林");
        // 実施
        String actual = MoriUtilA.getMoriString("林");
        assertEquals("あなたは林です", actual);
    }
}

pom.xml

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-all</artifactId>
    <version>1.9.5</version>
    <scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mockito/mockito-core -->
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <scope>test</scope>
    </dependency>
<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>