Voici un exemple de code, qui renvoie plusieurs valeurs.
assert.Equal(t,[nil,nil],testObject.CreateTenantHandler(nil) );
Dans le fichier de test, j'ai essayé de faire les choses ci-dessous.
func (c Calc) CreateTenantHandler(item *models.TenantInput) (*models.Response, *models.ErrorDetails) {
...
...
...
return &models.Response{ResponseStatus: 201, TenantOutput: tenantoutput,}, nil
}
J'ai également vérifié d'autres réponses mais je n'ai pas trouvé ce dont j'avais besoin.
4 Réponses :
Vous ne le faites pas. Cela n'a rien à voir avec le témoignage - c'est ainsi que fonctionne Go. Définissez plusieurs variables sur les valeurs de retour, puis affirmez chacune d'elles individuellement:
x, y := testObject.CreateTenantHandler(nil) assertEqual(t, x, expectedX) assertEqual(t, y, expectedY)
vous pouvez ajouter une fonction de conversion pour le corriger
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()))
}
Je suppose que cela fonctionnerait, mais cela masque l'origine de toute erreur.
Une façon simple de faire ce que vous voulez est de déclarer une fonction comme shim:
assert.Equal(t, shim(5,6), shim(testObject.CreateTenantHandler(nil)));
puis:
func shim(a, b interface{}) []interface{} {
return []interface{}{a, b}
}
Le problème est que vous souhaitez convertir plusieurs valeurs de retour en une seule valeur utilisable par assert.Equal.
Vous pouvez le faire en passant plusieurs valeurs à une fonction variadique qui convertit toutes les valeurs (peu importe combien) en une seule tranche d'interfaces. Cette tranche est alors traitée comme une valeur unique et fonctionne assez bien avec testify assert.Equal.
La fonction shim mentionnée ailleurs est proche, mais elle a un nombre fixe de paramètres. makeIS () ci-dessous est moins de code, plus propre, plus simple et fonctionne avec n'importe quel nombre de valeurs / paramètres de retour. Mettez cette fonction dans votre package de test.
assert.Equal(t, makeIS(eX,eY), makeIS(iReturnTwoValues())
Maintenant l'assert fonctionne comme ceci
// makeIS will convert any number of parameters to a []interface{}
func makeIS(v ...interface{}) []interface{} {
return v
}
Le testify sait comment faire la comparaison et rapporte très bien les différences dans les paramètres individuels. Notez que cela présente l'avantage supplémentaire de "ressembler à" l'appel que vous souhaitez tester avec les deux valeurs cibles à gauche de la fonction.