2013-05-24 2 views
2

У меня есть класс следующим образом:Дразнящий в Autowired WebService с помощью Mockito/EasyMock

@Component 
public class UserAuthentication { 

    @Autowired 
    private AuthenticationWebService authenticationWebservice; 

    public boolean authenticate(username, password) { 

    result = authenticationWebService.authenticateUser(username, password) 

    //do 
    //some 
    //logical 
    //things 
    //here 

    return result; 
    } 
} 

Я пишу модульный тест, чтобы увидеть, если функция ведет себя правильно. Теперь, конечно, я не должен делать фактический вызов веб-службы. Итак, как я могу издеваться над веб-сервисом таким образом, что, когда я вызываю метод аутентификации моего класса, вместо элемента реального используется объект mocked webservice.

ответ

1

Использование Mockito вы окурок внешней услуги, как это:

'when(mockedAuthenticationWebService.authenticate(username, password).thenReturn(yourStubbedReturnValue);' 

Я пишу это вверх из памяти, так что прощу, если он не компилируется сразу; вы получите эту идею.

Здесь, используя Mockito, Hamcrest и JUnit 4, я также проверить, что служба вызывается с правильными параметрами, которые ваш тест хочет, чтобы охватить как хорошо :)

@Test 
public class UserAuthenticationTest { 
    // Given 
    UserAuthentication userAuthentication = new UserAuthentication(); 
    AuthenticationWebService mockedAuthenticationWebService = mock(AuthenticationWebService.class) 

    String username = "aUsername" , password = "aPassword"; 
    when(mockedAuthenticationWebService.authenticate(username, password).thenReturn(true); // but you could return false here too if your test needed it 

    userAuthentication.set(mockedAuthenticationWebService); 

    // When 
    boolean yourStubbedReturnValue = userAuthentication.authenticate(username, password); 

    //Then 
    verify(mockedAuthenticationWebService).authenticateUser(username, password); 
    assertThat(yourStubbedReturnValue, is(true)); 
} 

Наконец, тот факт, что ваш класс @Autowired не имеет никакого отношения ни к чему из этого.

1

Вы должны использовать аннотацию @ContextConfiguration в своем тестовом классе.

Это Spring будет загрузить конфигурацию контекста из classpath:/foo.bar/spring/test/...xml

В этом context.xml файл из /test/ вы можете создавать фиктивные объекты и Spring будет вводить их вместо реальных.

Вы можете найти много руководств, если вам требуется пошаговое руководство, просто найдите Spring @ContextConfiguration (я не включаю ссылки, поскольку они могут меняться во времени).

Смежные вопросы