golang测试不正确地比较等式
我正在学习围棋,并且正在改编一个Java生活游戏的例子。但是,我编写的测试spy错误地比较了我的golang测试不正确地比较等式,go,testing,test-double,Go,Testing,Test Double,我正在学习围棋,并且正在改编一个Java生活游戏的例子。但是,我编写的测试spy错误地比较了我的Worldstruct的相等性-测试在失败时通过,因为没有调用output(World)。我做错了什么 测试: 实施: package gameoflife type SimulatesConway struct { generatesSeedWorld GeneratesSeedWorld outputsWorld OutputsWorld } func NewSim
World
struct的相等性-测试在失败时通过,因为没有调用output(World)
。我做错了什么
测试:
实施:
package gameoflife
type SimulatesConway struct {
generatesSeedWorld GeneratesSeedWorld
outputsWorld OutputsWorld
}
func NewSimulatesConway(generatesSeedWorld GeneratesSeedWorld, outputsWorld OutputsWorld) SimulatesConway {
return SimulatesConway{generatesSeedWorld: generatesSeedWorld, outputsWorld: outputsWorld}
}
func (sc *SimulatesConway) simulate() {
// seedWorld := sc.generatesSeedWorld.generate()
// sc.outputsWorld.output(seedWorld)
}
type GeneratesSeedWorld interface {
generate() World
}
type OutputsWorld interface {
output(world World)
}
type World struct{}
调用
outputsWorldSpy:=outputsWorldSpy{}
时,golang在outputsWorldSpy.outputCalledWithWorld=World{}
中分配了默认值,并且您分配了seedWorld:=World{}
。所以它们是一样的,这就是为什么测试通过了。如果你想处理这种情况,我建议使用指针
type OutputsWorldSpy struct {
outputCalledWithWorld *World
}
func (ow *OutputsWorldSpy) output(world World) {
ow.outputCalledWithWorld = &world
}
func (ow *OutputsWorldSpy) wasOutputCalledWithWorld(world World) bool {
if ow.outputCalledWithWorld == nil {
return false
}
return cmp.Equal(world, *ow.outputCalledWithWorld)
}
所有
World
值都是相等的。为什么他们不会呢?它们没有什么区别。我不熟悉cmp包,但是本机相等。啊,好吧,为了检查我的理解,如果我定义了一个结构并且没有给它的成员分配任何值,它们将被分配一个默认值,因此相等比较通过了吗?通过检查内存地址是否为零,我们可以防止在检查两者是否相等之前没有分配任何内容的情况?
type OutputsWorldSpy struct {
outputCalledWithWorld *World
}
func (ow *OutputsWorldSpy) output(world World) {
ow.outputCalledWithWorld = &world
}
func (ow *OutputsWorldSpy) wasOutputCalledWithWorld(world World) bool {
if ow.outputCalledWithWorld == nil {
return false
}
return cmp.Equal(world, *ow.outputCalledWithWorld)
}