Как заглушить метод в Mockito, имя которого неизвестно до времени выполнения? - PullRequest
0 голосов
/ 21 марта 2011

Я хотел бы проверить, что каждый метод с известным префиксом в определенном классе вызывается во время определенного теста.

Я не могу найти способ использовать mockito для заглушения метода иликак проверить, что метод был вызван, когда имя метода неизвестно до времени выполнения.

Приведенный ниже код показывает, как я могу получить методы, которые я хотел бы заглушить:

Method[] methodArr = customValidation.getClass().getDeclaredMethods();
loop: for (Method method : methodArr) {
    if (method.getName().startsWith("validate")) {
        // then stub out this method and check whether it gets called
        // after we run some code
    }
}

Вопрос в том, как я могу заглушить их, не зная имен методов, до времени выполнения?

Кто-нибудь делал что-то подобное раньше или имеет хорошее представление о том, как это можно сделать?

Большое спасибо

Ответы [ 2 ]

1 голос
/ 21 марта 2011

Для всех, кого это интересует, решение, которое я использовал, состояло в том, чтобы использовать регулярные насмешки, чтобы заглушить мои методы:

UserBeanValidation userBeanValidation = Mockito.mock(UserBeanValidation.class);
Mockito.when(userBeanValidation.validateUserId(Mockito.anyString())).thenReturn(validationError);

Я проверил, что они были вызваны один раз, и увеличивал число при каждом выполнении одного из заглушенных методов.Это количество можно сравнить с количеством методов с определенным префиксом, чтобы убедиться, что были вызваны все ожидаемые методы:

int totalMethodCount= 0;
Method[] methodArr = customValidation.getClass().getDeclaredMethods();
loop: for (Method method : methodArr) {

    if (method.getName().startsWith("validate")) {
        totalMethodCount++;
    }
}

Assert.assertEquals(totalMethodCount, calledMethodCount);

Таким образом, я могу быть уверен, что все мои методы вызываются ... сейчас, чтобы выяснить,если они делают то, что должны.

1 голос
/ 21 марта 2011

На данный момент это невозможно.Существует неразрешенный запрос на улучшение

...