Как использовать PowerMock/Mockito/EasyMock для использования издевательского объекта для внедрения зависимостей?

У меня есть метод AuthenticationManager.authenticate(username,password), который вызывается в тестируемом методе SomeService. AuthenticationManager внедряется в SomeService:

@Component
public class SomeService {
    @Inject
    private AuthenticationManager authenticationManager;

    public void someMethod() {
        authenticationManager.authenticate(username, password);
        // do more stuff that I want to test
    }
}

Теперь для модульного теста мне нужен метод аутентификации, чтобы просто притвориться, что он работает правильно, в моем случае ничего не делать, поэтому я могу проверить, выполняет ли сам метод ожидаемую работу (аутентификация проверяется в другом месте в соответствии с принципами модульного тестирования, однако аутентификация требует для вызова внутри этого метода) Итак, я думаю, мне нужно SomeService использовать издевательский AuthenticationManager, который просто вернется и больше ничего не сделает, когда authenticate() будет вызван someMethod().

Как мне это сделать с PowerMock (или EasyMock/Mockito, которые являются частью PowerMock)?


person Pete    schedule 14.02.2012    source источник


Ответы (1)


С Mockito вы можете просто сделать это с помощью этого фрагмента кода (используя JUnit):

@RunWith(MockitoJUnitRunner.class)
class SomeServiceTest {

    @Mock AuthenitcationManager authenticationManager;
    @InjectMocks SomeService testedService;

    @Test public void the_expected_behavior() {
        // given
        // nothing, mock is already injected and won't do anything anyway
        // or maybe set the username

        // when
        testService.someMethod

        // then
        verify(authenticationManager).authenticate(eq("user"), anyString())
    }
}

И вуаля. Если вы хотите иметь определенное поведение, просто используйте синтаксис заглушки; см. документацию здесь. Также обратите внимание, что я использовал ключевые слова BDD, что является удобным способом работы/разработки вашего теста и кода во время практики разработки через тестирование.

Надеюсь, это поможет.

person Brice    schedule 14.02.2012