2015-06-05 68 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(),因为它默认情况下什么都不做。