Всем привет!
При написании тестов столкнулся с одной проблемой. Есть тестируемый код;
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?
Данный пример простой, так как в реальном коде, структура может иметь множество переменных-структур, которые имплемитируют разные интерфейсы. Также логика различных методов может быть довольно таки сложна, чтобы получилось легко использовать замоканные переменные.