驗證靜態方法

說明

除了 Mock 靜態方法之外,有時候也會需要驗證與靜態方法之間的互動

範例

在這裡使用與上一個範例一樣的程式碼:

public class VerificationPresenter {

    private ServerModel serverModel;
    private VerificationView view;

    public void sendVerification(String email){
        if(Utils.isEmail(email)){
            serverModel.sendVerification(email, view);
        }else{
            view.showWarning();
        }
    }
}

目標

這次我們來驗證 Utils.isEmail() 是否有被呼叫到

開始測試

1. 事前準備

@RunWith(PowerMockRunner.class)
@PrepareForTest(Utils.class)
public class VerificationPresenterTest {

    @Mock
    private ServerModel serverModel;

    @Mock
    private VerificationView verificationView;

    @Test
    public void isEmailCalled() throws Exception {
        PowerMockito.mockStatic(Utils.class)
        ...
    }

}

與上一節相同,就不再贅述

2. 完成測試

    @Test
    public void isEmailCalled() throws Exception {
        PowerMockito.mockStatic(Utils.class);
        //arrange
        String email = "[email protected]";
        //act
        VerificationPresenter verificationPresenter = new VerificationPresenter(serverModel, verificationView);
        verificationPresenter.sendVerification(email);
        //assert
        PowerMockito.verifyStatic(times(1));
        // 先指定驗證方法被呼叫的行為
        Utils.isEmail(email);
        // 真正呼叫該方法
    }

超級不直覺的方式....

results matching ""

    No results matching ""