Это правильный случай для шпиона Мокито? - PullRequest
6 голосов
/ 12 сентября 2010

Допустим, у меня есть класс

class SomeClass
{
  public void methodA()
  {}

  public void methodB()
  {}

  public void someMethod()
  {
     methodA();
     methodB();
  }
}

Я хотел бы протестировать поведение someMethod () с помощью Mockito.

Единственный способ, которым я мог придумать, - это использовать spy ();

Что-то вроде

SomeClass someClass = spy(new SomeClass());
someClass.someMethod();
InOrder inOrder = inOrder(someClass);
inOrder.verify(someClass).methodA();
inOrder.verify(someClass).methodB();

Я новичок в mockito, а в документации написано

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

Так что, возможно, я что-то упускаю, и есть лучший (правильный) способ убедиться, что methodA и methodB были вызваныбез явного вызова их в тестовом примере.

Спасибо.

Ответы [ 2 ]

6 голосов
/ 12 сентября 2010

Да, spy() подходит для ваших целей.Предупреждение связано с тем, что вызываются реальные методы, и, следовательно, вы можете получить неожиданные результаты (например, реальные деньги снимаются с банковского счета)

0 голосов
/ 24 мая 2012

Если ваш код нуждается в шпионе для модульного тестирования - что-то не так.Шпион - это первый признак запаха кода.У вас есть два варианта, чтобы избежать этого в вашем примере:

  1. Вы можете избежать насмешки над одним из методов и протестировать весь метод someMethod.
  2. Если methodA и methodB действительно необходимо пересмотреть- вы можете переместить их в отдельный класс и т. д.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...