【发布时间】:2015-11-14 23:12:53
【问题描述】:
因此,根据我的阅读,您无法测试 Go 中的函数是否相等,但我正在尝试解决测试用例问题,因此任何重构此问题的帮助都会有所帮助。
我有一个构造函数,我正在向它传递一些配置值。基于这些配置,它将另一个构造函数分配给结构的成员。后来,在不同的方法中,它调用了新的构造函数。我这样做是因为它使测试结构上的方法变得更容易,因为我现在可以创建一个测试构造函数并将结构成员重新分配给它,然后再调用我正在测试的方法。类似于这里的方法:Mock functions in Go
不过,现在我正在尝试在 struct 构造函数上编写一个测试用例,但我很难弄清楚如何测试它。
这是一个例子:
type requestBuilder func(portFlipArgs, PortFlipConfig) portFlipRequest
type portFlip struct {
config PortFlipConfig
args portFlipArgs
builder requestBuilder
}
func newPortFlip(args portFlipArgs, config PortFlipConfig) (*portFlip, error) {
p := &portFlip{args: args, config: config}
if p.netType() == "sdn" {
p.builder = newSDNRequest
} else if p.netType() == "legacy" {
p.builder = newLegacyRequest
} else {
return nil, fmt.Errorf("Invalid or nil netType: %s", p.netType())
}
return p, nil
}
“newSDNRequest”和“newLegacyRequest”是新的构造函数。我不知道如何测试 newPortFlip 方法以确保它为“builder”成员分配了正确的方法,因为您无法测试函数相等性。
此时我唯一的想法是拥有一个“builderType string”成员,并将其分配给新构造函数的名称,然后我就可以对其进行测试。比如:
func newPortFlip(args portFlipArgs, config PortFlipConfig) (*portFlip, error) {
p := &portFlip{args: args, config: config}
if p.netType() == "sdn" {
p.builderType = "newSDNRequest"
p.builder = newSDNRequest
} else if p.netType() == "legacy" {
p.builderType = "newLegacyRequest"
p.builder = newLegacyRequest
} else {
return nil, fmt.Errorf("Invalid or nil netType: %s", p.netType())
}
return p, nil
}
但这似乎有点轻率,所以我想在我这样做之前我应该寻找更好的方法。
想法?
【问题讨论】:
标签: unit-testing testing go