arzonus
@arzonus
Go Developer

Как замокать метод структуры, который вызывается в другом методе этой же структуры в Golang?

Всем привет!
При написании тестов столкнулся с одной проблемой. Есть тестируемый код;
Do() error
}
type MyInterface interface {
   MethodA() error
   MethodB() error
}
type MyStruct struct {
  OtherStruct OtherInterface
}
func(s *MyStruct) MethodA() error {
  return s.MethodB()
}
func(s *MyStruct) MethodB() error {
  return s.OtherStruct.Do()
}


И код, который тестирует MethodB

ype MockOtherStruct struct {
  Do_Error error
}
func (t *MockOtherStruct) Do() error {return t.Do_Error}


TestMyStruct_MethodB(t *testing.B) {
  expectedError = nil
  mos := &MockOtherStruct{
    Do_Error: nil
  }
  ms := MyStruct{
   OtherStruct: mos,
  }
  err := ms.MethodB()
  if err != expectedError {
    t.Fatal(err)
  }      
}


Как мне протестировать MethodA, замокав MethodB?
Данный пример простой, так как в реальном коде, структура может иметь множество переменных-структур, которые имплемитируют разные интерфейсы. Также логика различных методов может быть довольно таки сложна, чтобы получилось легко использовать замоканные переменные.
  • Вопрос задан
  • 844 просмотра
Пригласить эксперта
Ответы на вопрос 2
@ivahaev
Программист, связист и просто хороший человек
Не надо мокать, нужно упрощать логику.

Кроме того, *testing.B используется для бенчмарков. Нужно использовать *testing.T для тестирования.
Ответ написан
Смотрите в сторону testify
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы