假设我有这段代码,我想为Foo()创建一个测试
重要的是福打电话给酒吧
package main
type MyInterface interface {
Foo() error
Bar() error
}
type MyStruct struct {
}
func NewMyStruct() MyInterface{
return &MyStruct{}
}
func (m *MyStruct) Foo() error {
// do something
m.Bar()
// do something else
return nil
}
func (m *MyStruct) Bar() error {
// do something
return nil
}
有没有可能为此创建一个测试,让我在运行Foo之前模拟Bar的行为?或者我做了一些根本错误的事情?
我可以看到,如果我提取酒吧到自己的服务,我会嘲笑它的方式,但这也感觉不对。
任何见解或文档链接都是很好的。
1条答案
按热度按时间agxfikkp1#
您应该能够通过一些更改来实现您所需要的。首先,让我展示代码,然后我将带您完成所有相关的更改。
main.go
文件在这里,为了能够成功地模拟我们的依赖关系,我做了一些修改。让我来回顾一下:
MyStruct
具有类型为MyInterface
的依赖项1.函数
NewMyStruct
接受接口作为参数,并返回指向MyStruct
结构的指针1.在
Foo
方法中,我们将依赖指针接收器类型示例的DS
字段现在,让我们切换到测试文件。
main_test.go
文件在这里,我发现最好在代码中添加注解,以给予发生的事情的时间顺序。其思想是测试的真实的系统(例如
sut
变量)依赖于mock而不是实际实现。由于方法Times
,我们确保Bar
方法被调用一次。当涉及到测试生产代码时,我总是使用这种方法,我发现它非常灵活和令人惊讶!
让我知道如果这对你有帮助或者你还需要别的东西,谢谢!