Убедитесь, что перегруженный метод был вызван с правильными аргументами из метода перегрузки

#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) Вызывает ли перегруженный метод или нет, не имеет значения для теста. Тестируемый класс представляет собой черный ящик, и детали реализации не важны. Единственное, что должно иметь значение для теста, это: правильно ли ведет себя метод с заданными аргументами, т. Е. Является ли результат правильным (возвращаемый результат или что-то еще). Как это привело к такому результату, не имеет значения для модульного теста.