Пример использования стороннего API:
fund doSomething(api *api.Client) {
...
result, err := api.Logical().Write(val1, val2)
...
}
Я могу обработать начальный вызов Logical()
с помощью моего собственного интерфейса:
type API interface {
Logical() *api.Logical
}
...
doSomething(&MockAPI{}) // Assuming MockAPI implements API
Однако теперь это приводит к проблеме зрение: метод Logical()
должен иметь указанную выше сигнатуру функции, в противном случае я не смог бы заменить настоящий api
объект для моего интерфейса. Поскольку тип *api.Logical
вложен в стороннюю библиотеку API, я не могу просто смоделировать его с помощью другого интерфейса:
type Writer interface {
Write(string, string) Result, error
}
type API interface {
Logical() *Writer
}
...
doSomething(&api.Client{}) // Doesn't implement Logical() *Writer
Как бы я сменил этот вызов API, чтобы я мог возвращать пользовательские данные, а не ударил живой сервис? Если это помогает, это основано на фактическом API .