#java #mockito
#java #mockito
Вопрос:
Я хочу написать тесты Mockito для следующего класса:
public class SomeClass {
public String doSomething(SomeObject a, JsonArray b) {
doSomething(a, b, "");
}
public String doSomething(SomeObject a, JsonArray b, String c) {
// do some stuff
}
}
Я вроде как хотел имитировать аргументы по умолчанию, перегрузив метод doSomething
. Второй doSomething
у меня уже есть тестовый пример для этого — проверка того, что содержащийся в нем материал работает правильно.
Теперь я хочу протестировать первый doSomething
, просто убедившись, что вызов второго там вызывается с правильными аргументами.
Итак, моя попытка для testcase была:
@Test
public void testDoSomething() {
// Prepare
final SomeClass clsIns = Mockito.mock(SomeClass.class);
final SomeObject someObj = Mockito.mock(SomeObject.class);
final JsonArray jsonArray = new JsonArray();
// Act
clsIns.doSomething(someObj, jsonArray);
// Assert
Mockito.verify(clsIns).doSomething(someObj, jsonArray, "");
}
Но это не проверяет вызов второго перегруженного метода, а вместо этого сообщает мне, что аргументы были другими (Желаемыми: someObj, jsonArray, ""
, фактическими: someObj, jsonArray
)
Как я могу сказать Mockito, чтобы проверить аргументы перегруженного (второго doSomething)
метода?
Комментарии:
1. Возможно, ваша перегруженность окончательная?
2. Нет, оба являются общедоступными и не окончательными.
3. Вы издеваетесь над всем классом. Таким образом, вы также издеваетесь над первым методом, а не только над вторым. Прочитайте документацию mockito и поищите шпионов и частичные насмешки.
4. Этот тест не имеет для меня смысла.
doSomething(SomeObject, SomeObject)
Вызывает ли перегруженный метод или нет, не имеет значения для теста. Тестируемый класс представляет собой черный ящик, и детали реализации не важны. Единственное, что должно иметь значение для теста, это: правильно ли ведет себя метод с заданными аргументами, т. Е. Является ли результат правильным (возвращаемый результат или что-то еще). Как это привело к такому результату, не имеет значения для модульного теста.