Почему Mockito RETURNS_DEFAULT не возвращает строку по умолчанию? - PullRequest
3 голосов
/ 22 декабря 2011

В следующем примере (mockito 1.10.19):

    MyClass myClass = Mockito.mock(MyClass .class, RETURNS_DEFAULTS);
    String s = myClass.getName();

Почему это приводит к s == null, а не к пустой строке?

Он действительно обещал null для строки в ReturnsEmptyValues ​​. Но кажется столь очевидным возвращать "", что мне интересно, есть ли причина для этого не делать.

РЕДАКТИРОВАТЬ: обновленная версия до 1.10.19 с 1.8, потому что больше нет документации для 1.8.

Ответы [ 4 ]

11 голосов
/ 22 декабря 2011

По ссылке, которую вы разместили;

Ответ по умолчанию для каждого макета Mockito.

  • Возвращает соответствующий примитив для методов, возвращающих примитивы
  • Возвращает согласованные значения для классов примитивных оболочек (например, метод int-returning возвращает 0, а метод Integer-return возвращает 0, тоже)
  • Возвращает пустую коллекцию для методов, возвращающих коллекцию (работает для наиболее часто используемых типов коллекций)
  • Возвращает описание макета для метода toString ()
  • Возвращает ноль для всего остального

Из FAQ:

Какие значения макеты возвращают по умолчанию?

Для того, чтобы быть прозрачным и ненавязчивым все Mockito издевается возвращаемые по умолчанию «хорошие» значения. Например: нули, ложные, пустые коллекции или нули.

Вероятно, это было сделано для того, чтобы соответствовать любым другим методам, которые возвращают ноль для любых других не примитивных, не примитивных объектов Wrapper.

Вы всегда можете реализовать свой собственный Ответ , чтобы перейти к mock, который возвращает пустые строки для возвращаемых строк.

9 голосов
/ 22 декабря 2011

Это не было задумано во время разработки, и теперь по соображениям стабильности это поведение не изменилось.

Есть неотвеченный ответ с именем ReturnsMoreEmptyValues ​​, который возвращается как имя типапредлагает больше пустых значений.

Вы также можете взглянуть на ответ Mockito.RETURNS_SMART_NULLS , который внутренне использует ReturnsMoreEmptyValues ​​и содержит более интересные отладочные данные.

Примечаниеэто связано с версией Javadoc 1.10.19, однако это поведение остается неизменным в версии 2.x на момент написания этой статьи.

1 голос
/ 22 декабря 2011
  1. Поскольку дизайнер Mockito решил использовать это как значение по умолчанию
  2. Поскольку ноль также является значением по умолчанию для полей в Java-объекте
0 голосов
/ 22 декабря 2011

В соответствии с кодом Mockito для всех не коллекций и непростых типов возвращается ноль.String является подтипом Object, и его «пустое» значение равно null, а не «». ИМХО Это проектное решение, если вы представляете пустое значение для строки как null или «».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...