如何测试调用自己方法的结构?
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 保持不变
我有一个结构:
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 保持不变