Как мне использовать PowerMock / Mockito / EasyMock, чтобы использовать фиктивный объект для внедрения зависимости? - PullRequest
0 голосов
/ 14 февраля 2012

У меня есть AuthenticationManager.authenticate(username,password) метод, который вызывается в someMethod тестируемого 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
    }
}

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

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

1 Ответ

3 голосов
/ 14 февраля 2012

С 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, что является отличным способом проработать / спроектировать ваш тест и код во время практики разработки через тестирование.

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

...