Есть ли возможность использовать что-то похожее на захват аргумента mockito?
Мы используем gopkg.in/mgo.v2/bson для общения с mongo, и его API заполняет переданные структуры, а не возвращает результаты, например:
func (p *Pipe) One(result interface{}) error {...
Проблемы возникают, когда я хочу макетировать / тестировать код, который использует это. Я хочу и посмеяться над этим исполнением, и каким-то образом получить озвученное значение в "результате". В настоящее время тест имеет:
query.EXPECT().One(gomock.Any())
Итак, как вы видите, я не получаю никакого значения, я просто настраиваю gomock, чтобы проверить, что при запуске моего метода должен вызываться query.One. Я не могу передать структуру, как
mystruct := MyStruct{}
query.EXPECT().One(&mystruct)
потому что mystruct в тестовом коде и в реальном коде отличается, и проверка макета не удастся (ссылки разные). Я ищу что-то похожее на захват аргумента mockito: https://static.javadoc.io/org.mockito/mockito-core/2.6.9/org/mockito/ArgumentCaptor.html
1 ответ
Этот проект может помочь вам: https://github.com/bouk/monkey. Вы можете заменить функцию и использовать переменную bool для проверки использования.
called := false
monkey.Patch(package.One, func(result interface{}) error {
if result == expected {
called := true
return nil
}
return errors.new("not expected")
})
Не забудьте восстановить исходную функцию.
defer monkey.Unpatch(package.One)