如何测试调用自己方法的结构?

How to test a struct that calls its own method?

我有一个结构:

type foo struct {
    bar mockableInterface // some interface that I can mock
}

func (f *foo) DoSmth1() []interface{} {
    return f.bar.Bar()
}

func (f *foo) DoSmth2() []interface{} {
    res := f.DoSmth1()
    //some code to test
}

这里我模拟bar和测试DoSmth1()没问题。但是如何测试 DoSmth2().
并不明显 我应该重写此方法以使其可测试还是以某种方式重写测试?

@mkopriva 建议仅在 DoSmth2() 测试中模拟 Bar() 调用。但在这种情况下,我会为每次调用 DoSmth1() 的所有方法重写测试。所以我得出了以下解决方案。我们可以将这个模拟逻辑封装在一个方法中:

func (s *TestSuite) ExpectDoSmth1(times int, in, out []interface{}) {
    s.barMock.Expect().Bar(in...).Times(times).Return(out...)
}

这样,如果 DoSmth1() 实现发生变化,我们只能更改此方法,直到其 API 保持不变