所以我是Golang中具有模拟结构和函数的初学者。我基本上想检查是否已出于单元测试目的调用了函数。这是代码:
type A struct {
}
func (a *A) Foo (){}
type B struct {
a *A
}
func (b* B) Bar () {
a.Foo()
}
我基本上想检查在调用Bar时是否确实调用了Foo
我知道有一些可用于Golang的模拟框架,但是在测试现有struct和struct方法时,它们相当复杂
答案 0 :(得分:0)
如果要测试B并查看它是否真的调用了A的Foo函数,则需要模拟出A对象。由于您要检查的功能是Foo
,因此只需创建一个简单的Fooer
接口(您在Go中将其称为函数,即功能加上“ er”)即可。将B对A的引用替换为对Fooer的引用,您就很好。我根据您的代码here on the Go Playground创建了一个小示例:
package main
import "testing"
type A struct {
}
func (a *A) Foo() {}
type Fooer interface {
Foo()
}
type B struct {
a Fooer
}
func (b *B) Bar() {
b.a.Foo()
}
func main() {
var a A
var b B
b.a = &a
b.Bar()
}
// in your test:
type mockFooer struct {
fooCalls int
}
func (f *mockFooer) Foo() {
f.fooCalls++
}
func Test(t *testing.T) {
var mock mockFooer
var bUnderTest B
bUnderTest.a = &mock
bUnderTest.Bar()
if mock.fooCalls != 1 {
t.Error("Foo not called")
}
}