Насмешка одних и тех же функций с разным откликом много раз один за другим в Go lang - PullRequest
0 голосов
/ 25 июня 2018
first := mockClient.EXPECT().Do(gomock.Any()).Return(defaultResponse, nil)
mockClient.EXPECT().Do(gomock.Any()).Return(defaultResp, nil).After(first)

Как я могу назвать эти два издевательства один за другим много раз?Это правильный способ вызова макетов?Мне нужно сначала выполнить первый макет, а затем второй.Так что я следовал этому подходу.Но мне нужно вызвать их для серии тестовых входов в моих тестах UNIT. Где каждый раз, когда первый должен выполняться первым, а второй - после этого.Но я вижу, что это происходит только один раз, и в следующий раз будет вызван только второй.

1 Ответ

0 голосов
/ 26 июня 2018

Пакет gomock предоставляет несколько методов для упорядочивания.

Примечание перед примерами: Используя приведенный вами пример, один раз вызывается first один раз и возвращает его значения.Он будет помечен как «использованный» и «полный» и больше не будет рассматриваться.

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

Из документов:

По умолчанию ожидаемые вызовы не выполняются в каком-либо определенном порядке.Зависимость порядка вызова может быть обеспечена использованием InOrder и / или Call.After.Call.After может создавать более разнообразные зависимости порядка вызовов, но InOrder часто более удобен.

Link

Два варианта упорядочивания макетов

Порядок отдельных макетов :

first := mockClient.EXPECT().Do(gomock.Any()).Return(defaultResponse, nil)
second := mockClient.EXPECT().Do(gomock.Any()).Return(defaultResp, nil)

gomock.InOrder(
    first,
    second,
)

Поскольку макеты принимают абсолютно одинаковые аргументы, вы можете настроить ...

Несколько возвратов потот же макет .

mockClient.EXPECT().
    Do(gomock.Any()).
    Return(defaultResponse, nil).
    Return(defaultResp, nil)
...