为什么我的单元测试不一致通过/失败?(Golang和ScyllaDB)



我在Golang中遇到了与ScyllaDB有关的单元测试问题。代码似乎不是问题所在。单元测试有时会完美地工作,但同样经常会失败。这让我相信这可能是一个数据库问题,但我不确定它可能是什么。例如,在创建了一个带有一些基本实体元数据description: "desc", owner: "owner":的新实体test_server后,我会返回这样的错误

Error Trace:    test_file.go:243
test_file.go:68
Error:          Not equal: 
expected: &model.EntityMetadata{state:impl.MessageState{NoUnkeyedLiterals:pragma.NoUnkeyedLiterals{}, DoNotCompare:pragma.DoNotCompare{}, DoNotCopy:pragma.DoNotCopy{}, atomicMessageInfo:(*impl.MessageInfo)(nil)}, sizeCache:0, unknownFields:[]uint8(nil), EntityType:(*string)(0xc000512420), Description:(*string)(0xc000512430), Owner:(*string)(0xc000512440), Features:[]*model.FeatureMetadata(nil), DefaultTtl:(*int64)(0xc00003d1a8)}
actual  : &model.EntityMetadata{state:impl.MessageState{NoUnkeyedLiterals:pragma.NoUnkeyedLiterals{}, DoNotCompare:pragma.DoNotCompare{}, DoNotCopy:pragma.DoNotCopy{}, atomicMessageInfo:(*impl.MessageInfo)(nil)}, sizeCache:0, unknownFields:[]uint8(nil), EntityType:(*string)(0xc0005122d0), Description:(*string)(0xc0005122e0), Owner:(*string)(0xc0005122f0), Features:[]*model.FeatureMetadata(nil), DefaultTtl:(*int64)(0xc00003d170)}

Diff:
--- Expected
+++ Actual
@@ -13,4 +13,4 @@
EntityType: (*string)((len=11) "test_server"),
- Description: (*string)((len=4) "desc"),
- Owner: (*string)((len=5) "owner"),
+ Description: (*string)(""),
+ Owner: (*string)(""),
Features: ([]*model.FeatureMetadata) <nil>,
Test:           TestServer/GetEntityList

当然,实际结果应该是这样的(我有时会得到(:

--- Expected
+++ Actual
@@ -13,4 +13,4 @@
EntityType: (*string)((len=11) "test_server"),
- Description: (*string)((len=4) "desc"),
- Owner: (*string)((len=5) "owner"),
+ Description: (*string)("desc"),
+ Owner: (*string)("owner"),
Features: ([]*model.FeatureMetadata) <nil>,
Test:           TestServer/GetEntityList

以下是单元测试的样子(第68行是从函数调用单元测试的地方,第243行是函数位于test_file.go中的地方(。假设前面的一个函数已经尝试创建这个表,其描述和所有者为:

func getEntity(t *testing.T, ctx context.Context, s *Server) {
res, err := s.GetEntity(ctx, &models.EntityRequest{})
if assert.NoError(t, err) {
expected := &models.EntityMetadata{
EntityType: proto.String("test_server"),
Description: proto.String("desc"),
Owner: proto.String("owner"),
}
assert.Equal(t, expected, entity)
}

我在其他单元测试中也会遇到类似的错误/不一致,这只是其中之一。任何帮助都将不胜感激,我已经试着调试了一段时间了。注意:我已经为这些单元测试建立了读/写连接,数据库没有被模拟。

在不了解测试代码的情况下,我的假设可能是错误的,但是:在某些情况下,您似乎不是在比较数据,而是在比较指针与数据(至少输出表明了这一点(:

EntityType:(*string)(0xc000512420), Description:(*string)(0xc000512430), Owner:(*string)(0xc000512440), 

实际:

EntityType:(*string)(0xc0005122d0), Description:(*string)(0xc0005122e0),Owner:(*string)(0xc0005122f0)

这在大多数情况下都不起作用;您应该比较实际的数据值。

最新更新