Как сделать mock to void методами с Mockito

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

in foo.h
--------
#include "bar.h"

class foo
{
public:
    foo(bar *bar);
private:
    foo *m_foo;
};

and in bar.h
------------
class foo;
class bar
{
public:
    void methodFooWillCall();
protected:
    std::list<foo *> myFoos;
}
829
задан Lii 27 April 2019 в 18:47
поделиться

3 ответа

Решение так называемой проблемы заключается в использовании шпиона Mockito.spy (...) вместо mock Mockito.mock (..) .

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

58
ответ дан 22 November 2019 в 21:08
поделиться

Это может быть сделано 2 способами в зависимости от сценариев как:

  1. doAnswer - Если мы хотим, чтобы наш дразнивший пустой метод сделал что-то (дразнят поведение несмотря на то, чтобы быть пустым).

  2. doThrow - у Нас также есть Mockito.doThrow (), если Вы хотите выдать исключение из дразнившего пустого метода.

0
ответ дан 22 November 2019 в 21:08
поделиться

Посмотрите документацию по API Mockito . Как упоминается в связанном документе (пункт № 12), вы можете использовать любой из doThrow () , doAnswer () , doNothing () , doReturn () семейство методов из фреймворка Mockito для имитации методов void.

Например,

Mockito.doThrow(new Exception()).when(instance).methodName();

или, если вы хотите объединить это с последующим поведением,

Mockito.doThrow(new Exception()).doNothing().when(instance).methodName();

Предполагая, что вы собираетесь имитировать сеттер setState (String s) в классе World ниже код использует метод doAnswer для имитации setState .

World  mockWorld = mock(World.class); 
doAnswer(new Answer<Void>() {
    public Void answer(InvocationOnMock invocation) {
      Object[] args = invocation.getArguments();
      System.out.println("called with arguments: " + Arrays.toString(args));
      return null;
    }
}).when(mockWorld).setState(anyString());
1073
ответ дан 22 November 2019 в 21:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: