如何使用ArgumentCaptor mockito捕获函数的参数

时间:2017-11-30 04:28:17

标签: java mockito testng

我有

Somefun(){

   mockedService.execute(()->{
      //function body
   })

}

所以我想在mock中运行execute方法。我怎么能这样做? 我想通过某种方式,如果我捕获这个mock(它是一个函数)的参数并执行它,我的工作就完成了。有没有办法实现这个目标?或者其他一些方式。 谢谢!

1 个答案:

答案 0 :(得分:3)

它看起来像这样:

@RunWith(MockitoRunner.class)
public class SomeFunTest {
    @Mock Service mockedService;
    @Captor ArgumentCaptor<Runnable /* or whatever type of function you expect there*/> functionCaptor;

    @Test
    public void serviceShouldInvokeFunction() {
        // given
        ObjectUnderTest out = new ObjectUnderTest(mockedService);

        // when
        out.SomeFun();

        // then
        verify(mockedService).execute(captor.capture());

        /* Do your assertions after you captured the value */
        assertThat(captor.getValue()).isInstanceOf(Runnable.class); 
    }
}