Mockito单元测试——方法参数

模拟方法传入参数

在Mockito测试中我们可以指定我们对方法调用时候的参数,如下写法:

when ( list .get ( 0 ) ) .thenReturn ( "a" ) ;
         Assert .assertEquals ( "a" ,  list .get ( 0 ) ) ;

但有时候在实际开发中,我们可能需要模拟出入参,那么我们可以使用Mockito内置的一些方法,如下实例:

     @Test
     public void testAnyArg ( ) {
        
        when ( list .get (anyInt ( ) ) ) .thenReturn ( "a" ) ;
         System .out .println ( list .get ( 234 ) ) ;
     }

如上代码所示,我们可以使用anyInt来模拟任意类型的int值输入。Mockito还提供了类似的anyByte等方法。

利用ArgumentCaptor捕获方法参数进行验证

在一些测试场景中,我们可以使用ArgumentCaptor来验证我们的传入参数是否正确。
在Mockito中校验方法参数是否正确,实际还是调用Java对象的equals方法。如下代码,我们可以校验对应的List参数。

@Test
     public void testArgus ( )  {
         list .add ( "a" ) ;
         // 获取需要捕获的方法参数
        ArgumentCaptor <String > argument  = ArgumentCaptor .forClass (String . class ) ;
         //verify方法的参数中调用argument.capture()方法来捕获输入的参数
        verify ( list ) .add (argument .capture ( ) ) ;
         //argument中存入了我们之前对方法调用的值
         Assert .assertEquals ( "a" , argument .getValue ( ) ) ;
        
         list .add ( "b" ) ;
        verify ( list , times ( 2 ) ) .add (argument .capture ( ) ) ;
         Assert .assertArrayEquals ( new Object [ ] { "a" ,  "a" ,  "b" } , argument .getAllValues ( ) .toArray ( ) ) ;
     }

在测试中我们也可以通过抽象类ArgumentMatcher来实现自定参数验证。

你可能感兴趣的:(单元测试)