我正在使用Golang,目前正在使用Testify做一些有趣的单元测试,我的文件如下所示
type myStruct struct {
field_1 string
}
func (self *myStruct) writeFirst() {
//doing something
//modify field_1
self.writeSecond()
}
func (self *myStruct) writeSecond() {
//doing something
}
在这种情况下,我正在测试writeFirst(),但我试图替换writeSecond(),因为它使用的是我不想使用的http东西,因为它可以访问互联网。
我认为使用第二个结构并将myStruct设置为匿名字段将是解决方案,但是它不起作用,因为第二个结构和myStruct具有不同的上下文。
在这种情况下,我不能使用模拟,因为writeSecond是该结构的方法。
我的测试用例如下所示:
func TestWriteFirst(t *testing.T) {
myStc := myStruct{}
assert.Equal(t,"My response", myStc.field_1)
}
我想要做的就是测试writeFirst而不传递给writeSecond()
为了说明Not-a-Golfer在评论中提到的重构类型,您可以考虑仅在作为接口的实例上调用第二个函数:
type F2er interface {
Func2()
}
type S struct{ _f2 F2er }
var s = &S{}
func (s *S) f2() F2er {
if s._f2 == nil {
return s
}
return s._f2
}
func (s *S) Func1() {
fmt.Println("s.Func1")
s.f2().Func2()
}
在这里:Func1
调用Func2
上s.f2()
,而不是直接s
。
s
,则s.f2()
返回...本身:s
s._f2
被struct
实现的任何其他对象替代Func2
,则s.f2()
返回该实例而不是其自身。请参阅此游乐场脚本中的完整示例。
输出:
TestFunc1
s.Func1
s.Func2
TestFunc1bis
s.Func1
testS.Func2 <=== different Func2 call
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句