Example of Mockito's argumentCaptor

后端 未结 4 1150
我在风中等你
我在风中等你 2020-12-04 07:21

Can anyone please provide me an example showing how to use the org.mockito.ArgumentCaptor class and how it is different from simple matchers that are p

4条回答
  •  遥遥无期
    2020-12-04 07:25

    Here I am giving you a proper example of one callback method . so suppose we have a method like method login() :

     public void login() {
        loginService = new LoginService();
        loginService.login(loginProvider, new LoginListener() {
            @Override
            public void onLoginSuccess() {
                loginService.getresult(true);
            }
    
            @Override
            public void onLoginFaliure() {
                loginService.getresult(false);
    
            }
        });
        System.out.print("@@##### get called");
    }
    

    I also put all the helper class here to make the example more clear: loginService class

    public class LoginService implements Login.getresult{
    public void login(LoginProvider loginProvider,LoginListener callback){
    
        String username  = loginProvider.getUsername();
        String pwd  = loginProvider.getPassword();
        if(username != null && pwd != null){
            callback.onLoginSuccess();
        }else{
            callback.onLoginFaliure();
        }
    
    }
    
    @Override
    public void getresult(boolean value) {
        System.out.print("login success"+value);
    }}
    

    and we have listener LoginListener as :

    interface LoginListener {
    void onLoginSuccess();
    
    void onLoginFaliure();
    

    }

    now I just wanted to test the method login() of class Login

     @Test
    public void loginTest() throws Exception {
        LoginService service = mock(LoginService.class);
        LoginProvider provider = mock(LoginProvider.class);
        whenNew(LoginProvider.class).withNoArguments().thenReturn(provider);
        whenNew(LoginService.class).withNoArguments().thenReturn(service);
        when(provider.getPassword()).thenReturn("pwd");
        when(provider.getUsername()).thenReturn("username");
        login.getLoginDetail("username","password");
    
        verify(provider).setPassword("password");
        verify(provider).setUsername("username");
    
        verify(service).login(eq(provider),captor.capture());
    
        LoginListener listener = captor.getValue();
    
        listener.onLoginSuccess();
    
        verify(service).getresult(true);
    

    also dont forget to add annotation above the test class as

    @RunWith(PowerMockRunner.class)
    @PrepareForTest(Login.class)
    

提交回复
热议问题