4 回答

TA貢獻1818條經(jīng)驗 獲得超11個贊
你不知道。它與 testify 無關——這就是 Go 的工作原理。將多個變量設置為返回值,然后單獨斷言每個變量:
x, y := testObject.CreateTenantHandler(nil) assertEqual(t, x, expectedX) assertEqual(t, y, expectedY)

TA貢獻1803條經(jīng)驗 獲得超3個贊
問題是您希望將多個返回值轉換為可由assert.Equal 使用的單個值。
您可以通過將多個值傳遞給可變參數(shù)函數(shù)來實現(xiàn)此目的,該函數(shù)將所有值(無論有多少)轉換為單個接口切片。然后,該切片被視為單個值,并且與 testify assert.Equal 配合得很好。
其他地方提到的 shim 函數(shù)很接近,但它有固定數(shù)量的參數(shù)。下面的 makeIS() 代碼更少、更干凈、更簡單,并且可以處理任意數(shù)量的返回值/參數(shù)。將此函數(shù)放入您的測試包中。
// makeIS will convert any number of parameters to a []interface{} func makeIS(v ...interface{}) []interface{} { return v }
現(xiàn)在斷言像這樣工作
assert.Equal(t, makeIS(eX,eY), makeIS(iReturnTwoValues())
作證者非常清楚如何進行比較并報告各個參數(shù)的差異。請注意,這還有一個額外的好處,即“看起來像”您想要使用函數(shù)左側的兩個目標值來測試的調用。

TA貢獻1798條經(jīng)驗 獲得超7個贊
做你想做的事情的一種簡單方法是聲明一個函數(shù),例如shim
:
??func?shim(a,?b?interface{})?[]interface{}?{ ????????return?[]interface{}{a,?b} ??}
進而:
??assert.Equal(t,?shim(5,6),?shim(testObject.CreateTenantHandler(nil)));

TA貢獻1836條經(jīng)驗 獲得超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 關注
- 185 瀏覽
添加回答
舉報