структур, методы которых возвращают указатели на другие структуры, что-то вроде
type A struct {
}
func (a *A) NextB() *B {
return &B{}
}
type B struct {
}
func (b *B) NextC() *C {
return &C{}
}
type C struct {
}
func (c *C) SomeFunc() {
}
и есть вызов этих методов
...
a.NextB().NextC().SomeFunc()
...
как правильно замокать этот вызов? Добавляю интерфейсы, подменяю A - MockA, B, - MockB, C - MockC, но ведь NextB() всегда возвращает *B.
Ну в момент вызова a у вас будет типа mockA* (где mockA реализует тот же интерфейс что и A), и на этом указателе будет вызван метод NextB (но тело-то метода будет уже от mockA, а не оригинальное), где вы вернете "mockB*" . Собственно непонятно в чем проблема.
Интерфейс будет выглядеть type Aer interface { NextB() *B } и где бы я его не реализовывал, мне нужно возвращать *B (а хочется *MockB) . Или я не правильно описываю интерфейс?
https://go.dev/play/p/ost6pqHJQDh
спасибо, сейчас попробую
Всем спасибо за помощь, Maxim Biryukov идея с дженериками классная, Alex Sibyuakin спасибо за идею подменять последний результат, решил вынести ... a.NextB().NextC().SomeFunc() ... в отдельную функуцию, а при тестировании подменять ее
Обсуждают сегодня