gpt4 book ai didi

go - 有没有一种好方法来更新传递给Golang中子测试的结构

转载 作者:行者123 更新时间:2023-12-01 22:36:34 24 4
gpt4 key购买 nike

我正在尝试编写一个表驱动的测试来测试,例如,如果传递给函数的两个指令相同,

订单可能会像

type Order struct {
OrderId string
OrderType string
}

现在,我的测试如下:
func TestCheckIfSameOrder(t *testing.T) {
currOrder := Order{
OrderId: "1",
OrderType: "SALE"
}
oldOrder := Order{
OrderId: "1",
OrderType: "SALE"
}
tests := []struct {
name string
curr Order
old Order
want bool
}{
{
name: "Same",
curr: currOrder,
old: oldOrder,
want: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := checkIfSameOrder(tt.curr, tt.old)
if got != tt.want {
t.Errorf("want %v: got %v", tt.want, got)
}
})
}

}

func checkIfSameOrder(currOrder Order, oldOrder Order) bool {
if currOrder.OrderId != oldOrder.OrderId {
return false
}
if currOrder.OrderType != oldOrder.OrderType {
return false
}
return true
}

我想做的是添加第二个测试,在其中我更改currOrder上的OrderId或其他内容,以便测试 slice 看起来像
tests := []struct {
name string
curr Order
old Order
want bool
}{
{
name: "Same",
curr: currOrder,
old: oldOrder,
want: true,
},
{
name: "Different OrderId",
curr: currOrder, <-- where this is the original currOrder with changed OrderId
old: oldOrder,
want: false,
},
}

在我看来,我无法使用简单的 []struct并在传递函数的地方使用某些东西,但是我似乎找不到在任何地方执行该操作的方法。如果有人能指出正确的方向,我将不胜感激。谢谢!

最佳答案

如果只有OrderId与每个测试都不同,则可以传递订单ID并根据该内部循环构造oldOrder和currOrder。
在整个过程中共享您突变的全局变量一直引起混乱。更好地为每个测试初始化​​新变量。

func TestCheckIfSameOrder(t *testing.T) {

tests := []struct {
name string
currId string
oldId string
want bool
}{
{
name: "Same",
currId: "1",
oldId: "1",
want: true,
},
{
name: "Different",
currId: "1",
oldId: "2",
want: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
curr := Order{
OrderId: tt.currId,
OrderType: "SALE"
}
old := Order{
OrderId: tt.oldId,
OrderType: "SALE"
}

got := checkIfSameOrder(curr, old)
if got != tt.want {
t.Errorf("want %v: got %v", tt.want, got)
}
})
}
}

关于go - 有没有一种好方法来更新传递给Golang中子测试的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61802633/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com