Go语言 测试Assert,除一个字段外均相等

qlvxas9a  于 2023-04-18  发布在  Go
关注(0)|答案(2)|浏览(112)

我正在写一个在数据库中阅读/写结构体的测试,它的一个字段是一个在数据库中自动计算的时间戳。所以当我写结构体时,它的时间戳是0,但当我从数据库中读取它时,时间戳有一个实际值。
我想比较这两个值,但忽略自动计算字段。可以吗?

00jrzges

00jrzges1#

在测试之前设置其他“except”字段:

now := time.Now()
expected := SomeStruct{
    ID:       123,
    Name:     "Test",
    Timestamp: now,
    ...
}
result, _ := db.Select(....)
result.Timeestamp = now
if !reflect.DeepEqual(result, expected) {
   ...
}
r1zhe5dt

r1zhe5dt2#

您可以使用cmpopts包的IgnoreFields函数轻松地完成此操作。
下面是一个例子:

got, want := FuncUnderTest()

if !cmp.Equal(want, got, cmpopts.IgnoreFields(YourStruct{}, "FieldName")) {
    t.Errorf("FuncUnderTest() mismatch")
}

相关问题