4 回答
TA贡献1818条经验 获得超11个赞
你不知道。它与 testify 无关——这就是 Go 的工作原理。将多个变量设置为返回值,然后单独断言每个变量:
x, y := testObject.CreateTenantHandler(nil) assertEqual(t, x, expectedX) assertEqual(t, y, expectedY)
TA贡献1803条经验 获得超3个赞
问题是您希望将多个返回值转换为可由assert.Equal 使用的单个值。
您可以通过将多个值传递给可变参数函数来实现此目的,该函数将所有值(无论有多少)转换为单个接口切片。然后,该切片被视为单个值,并且与 testify assert.Equal 配合得很好。
其他地方提到的 shim 函数很接近,但它有固定数量的参数。下面的 makeIS() 代码更少、更干净、更简单,并且可以处理任意数量的返回值/参数。将此函数放入您的测试包中。
// makeIS will convert any number of parameters to a []interface{} func makeIS(v ...interface{}) []interface{} { return v }
现在断言像这样工作
assert.Equal(t, makeIS(eX,eY), makeIS(iReturnTwoValues())
作证者非常清楚如何进行比较并报告各个参数的差异。请注意,这还有一个额外的好处,即“看起来像”您想要使用函数左侧的两个目标值来测试的调用。
TA贡献1798条经验 获得超7个赞
做你想做的事情的一种简单方法是声明一个函数,例如shim
:
func shim(a, b interface{}) []interface{} { return []interface{}{a, b} }
进而:
assert.Equal(t, shim(5,6), shim(testObject.CreateTenantHandler(nil)));
TA贡献1836条经验 获得超3个赞
您可以添加转换功能来修复它
package multi_return
import (
"github.com/stretchr/testify/assert"
"testing"
)
func multiReturn() (int, float32) {
return 1, 2
}
func toSlice(a ...interface{}) []interface{} {
return a
}
func TestMultiReturn(t *testing.T) {
assert.Equal(t, []interface{}{int(1), float32(2)}, toSlice(multiReturn()))
}
- 4 回答
- 0 关注
- 136 浏览
添加回答
举报