驗證靜態方法
說明
除了 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);
// 真正呼叫該方法
}
超級不直覺的方式....