0

在测试中,我有一个actual元素列表,其结构类似于:

type MyStruct struct {
     Field1 string
     Field2 int32
     .
     .       // a long list of other fields
     .

}

我想断言actual包含预期元素列表的元素,但仅考虑Field1and Field2,其他字段与测试无关。我想将ContainElements匹配器与一些“神奇”的自定义匹配器一起使用,就像在这个伪代码中一样:

expected := []MyStruct{{Field1: "value1", Field2: 1} ...{Field1: "value2", Field2: 2}}
Expect(actual).To(ContainElements(expected), <custom matcher>)

我一直在查看WithTransform[1] 中的匹配器,但我一直无法弄清楚如何在这种情况下使用它。

[1] http://eng.rightscale.com/2015/11/30/composing-gomega-matchers.html

4

2 回答 2

0

您可以使用 MatchFields(IgnoreExtras, Fields{}) 仅比较给定字段,因此在您的情况下,它应该类似于:

ContainElement(MatchFields(IgnoreExtras,Fields{
                    "Field1": Equal("Value1"),
                    "Field2": Equal(int32(42)),
                }))
于 2021-02-26T16:35:58.573 回答
0

我认为您可以直接使用自定义的 gomega 匹配器方面。看起来像

expected := []MyStruct{{Field1: "value1", Field2: 1} ...{Field1: "value2", Field2: 2}}
Expect(actual).To(Respcet(expected))
于 2021-07-09T08:47:43.183 回答