我刚开始使用 Go。我正在编写单元测试,我希望能够使用表格进行测试,其中要与实际结果进行比较的结果有时应该或不应该相等。
例如,这是我目前拥有的代码:
package main
import (
"github.com/stretchr/testify/assert"
"testing"
)
func TestFunc(t *testing.T) {
tables := []struct {
input string
comparisonResult string
shouldBeEqual bool
}{
{
"some irrelevant input",
"some result",
true,
},
{
"some other irrelevant input",
"some other result",
false,
},
}
for _, table := range tables {
actualResult := sampleFunc(table.input)
if table.shouldBeEqual {
assert.Equal(t, table.expectedResult, actualResult)
} else {
assert.NotEqual(t, table.expectedResult, actualResult)
}
}
}
现在,这还不错,但如果最后一位可以更改为像这样更清晰的东西以获得更好的可读性,那就更好了:
for _, table := range tables {
actualResult := sampleFunc(table.input)
assert.EqualOrNotEqual(t, table.comparisonResult, actualResult, table.shouldBeEqual)
}
因此,如果 和 相等,则第一个测试应该通过table.comparisonResult
,如果两者不actualResult
相等,则第二个测试应该通过。
我浏览了testify/assert
文档,我认为我没有找到类似于EqualOrNotEqual
我上面编写的假函数的函数,但也许我不小心跳过了一些东西,或者我没有某种 Go 特殊语法'不知道这可能有助于我实现这一目标。
注意:我很清楚我可以为此编写自己的函数。我问的原因是因为如果这是一个完善的模式,那么包/库通常将其作为内置函数包含在文档中,有时可能没有记录/埋在文档中。如果没有,也许我不应该这样做是有原因的,或者也许有更好的方法。开始使用一门新语言一开始是非常费力的,尤其是因为你必须学习所有新的习语和怪癖以及做事的正确方法。