我在 Go 上咬牙切齿,在深入研究表驱动测试后,我遇到了以下问题:我有一个返回多个值的函数// Halves an integer and and returns true if it was even or false if it was odd.func half(n int) (int, bool) { h := n / 2 e := n%2 == 0 return h, e}我知道half(1)返回值应该是0, false并且half(2)它应该匹配1, true,但我似乎无法弄清楚如何将它放在桌子上。怎么会有类似于以下内容的东西?var halfTests = []struct { in int out string}{ {1, <0, false>}, {3, <1, true>},}有没有其他更惯用的方法来做到这一点?作为参考,这里有一个类似于 FizzBuzz 函数的测试,使用表:var fizzbuzzTests = []struct { in int out string}{ {1, "1"}, {3, "Fizz"}, {5, "Buzz"}, {75, "FizzBuzz"},}func TestFizzBuzz(t *testing.T) { for _, tt := range fizzbuzzTests { s := FizzBuzz(tt.in) if s != tt.out { t.Errorf("Fizzbuzz(%d) => %s, want %s", tt.in, s, tt.out) } }}
1 回答
哆啦的时光机
TA贡献1779条经验 获得超6个赞
只需将另一个字段添加到保存第二个返回值的结构中。例子:
var halfTests = []struct {
in int
out1 int
out2 bool
}{
{1, 0, false},
{3, 1, true},
}
您的测试功能如下所示:
func TestHalf(t *testing.T) {
for _, tt := range halfTests {
s, t := half(tt.in)
if s != tt.out1 || t != tt.out2 {
t.Errorf("half(%d) => %d, %v, want %d, %v", tt.in, s, t, tt.out1, tt.out2)
}
}
}
- 1 回答
- 0 关注
- 149 浏览
添加回答
举报
0/150
提交
取消