我有一些靜態方法來模擬使用Mockito + PowerMock。一切都是正確的,直到我試圖嘲諷只拋出異常的靜態方法(並且別無其他)。PowerMockito模擬靜態方法引發異常
我的測試類是這樣的:
頂部:
@RunWith(PowerMockRunner.class)
@PrepareForTest({Secure.class, User.class, StringUtils.class})
體:
PowerMockito.mockStatic(Secure.class);
Mockito.when(Secure.getCurrentUser()).thenReturn(user);
PowerMockito.mockStatic(StringUtils.class);
Mockito.when(StringUtils.isNullOrEmpty("whatever")).thenReturn(true);
PowerMockito.mockStatic(User.class);
Mockito.when(User.findById(1L)).thenReturn(user); // exception !! ;(
boolean actualResult = service.changePassword();
和ChangePassword方法是:
Long id = Secure.getCurrentUser().id;
boolean is = StringUtils.isNullOrEmpty("whatever");
User user = User.findById(1L);
// ...
第2靜態調用工作正常(如果我註釋掉第三個),但最後一個(User.findById(long id))在'Mockito.when'方法中調用時拋出異常。這種方法看起來是這樣的:
public static <T extends JPABase> T findById(Object id) {
throw new UnsupportedOperationException("Please annotate your JPA model with @javax.persistence.Entity annotation.");
}
我的問題是我怎麼能嘲笑這種方法得到結果如我所料? 感謝您的幫助。
編輯:
感謝所有的答覆。我找到了解決方案。我試圖模擬一個方法findById,它不直接在User.class中,而是在用戶擴展的GenericModel.class中。現在一切正常。
目前尚不清楚您是否想要模擬某種方法來拋出異常,或者在模擬方法時遇到異常。而且關於JPA的最後一點似乎並不適合任何地方,或者至少讓我很困惑。 – 2013-03-20 12:47:28
你已經在嘲笑它。所以它不會調用拋出異常的真實方法 – 2013-03-20 17:33:53