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 關注
- 190 瀏覽
添加回答
舉報