2015-06-05 67 views
4

我找到了一些答案,但沒有任何工作適合我。使用Mockito嘲笑Scala void函數

試圖模擬Apache Shiro主題接口登錄方法返回void。

接口:

void login(AuthenticationToken token) throws AuthenticationException; 

我曾嘗試:

#1 
    val subject = mock[Subject] 
    doNothing().when(subject).login(new UsernamePasswordToken()) 

    #2 
    val subject = mock[Subject] 
    doNothing().when(subject).login(any[UsernamePasswordToken]) 

    #3 
    when(subject.login(any[UsernamePasswordToken])).thenAnswer(new Answer[Void]() { 
     override def answer(invocation: InvocationOnMock): Void = { 
     null:Void 
     } 

我一直在登錄時得到NullPointerException異常。我的目標是圍繞登錄方法進行測試,並測試一些成功案例以及一些此方法引發異常的失敗案例。

+0

Mockito中的默認行爲是不返回任何東西,如果你不「存根」一個特定的方法。也就是說,你是否嘗試刪除整個'doDonthing()...「行? – marios

+0

是的,所以我沒有看過類似的東西,但留下那條線作爲模擬(主題)給我NPE – Barry

+0

考慮()as []打字我的手機 – Barry

回答

6

Mockito中的默認行爲是,如果您不「存根」某一特定方法,則不返回任何內容。無需強制void()函數爲doNothing(),因爲它默認情況下什麼都不做。