是否有一种简单而紧凑的方法使用 Testify 来断言一段指向字符串的指针包含指向符合我期望的字符串的指针?
想象一下,您正在从函数调用(可能来自 API)中获取一段指向字符串的指针,并且您想要验证它是否包含指向您期望的字符串的指针。为了模拟这一点,我将制作一个测试数据结构来说明我的观点:
// Shared Fixture
var one = "one"
var two = "two"
var three = "three"
var slice = []*string{&one, &two, &three}
现在我想编写一个断言切片包含预期值的测试。我可以写这个测试:
func TestSliceContainsString(t *testing.T) {
assert.Contains(t, slice, "one")
}
它不起作用:[]*string{(*string)(0x22994f0), (*string)(0x2299510), (*string)(0x2299500)} does not contain "one"。有道理,切片包含指向字符串的指针,而字符串“one”不是这些指针之一。
我可以先转换它。它需要更多代码,但它有效:
func TestDereferencedSliceContainsString(t *testing.T) {
deref := make([]string, len(slice))
for i, v := range slice {
deref[i] = *v
}
assert.Contains(t, deref, "one")
}
我也可以按照我的期望传递一个指向字符串的指针:
func TestSliceContainsPointerToExpectation(t *testing.T) {
expect := "one"
assert.Same(t, &one, &one)
assert.NotSame(t, &one, &expect)
// How can I assert that they contain values
assert.Contains(t, slice, &expect)
}
老实说,这还不错。我可以断言对字符串的引用(指向不同的内存位置)包含我期望的值。这条路径的主要烦恼是我无法传递对文字的引用,这会占用更少的空间:
func TestSliceContainsString(t *testing.T) {
assert.Contains(t, slice, &"one")
}
还有其他我没有考虑的方法吗?golang / testify 中的其中一个更惯用吗?
茅侃侃
相关分类