J'essaie de se moquer de la méthode de la structure dans les cas de test, mais cela ne fonctionne pas.
Je veux me moquer de Valider forte> Méthode ici:
` ` p> Mes cas de test: p> ici mockdemostruct.validate strong> n'est pas appelé.
Je reçois Num 110 non valide strong> de valider, mais il devrait être error simulé 110 fort> p> p> p>
3 Réponses :
Dans ce cas, la méthode Go n'a pas de héritage comme vous l'avez supposé ici dans votre code. Vous ne pouvez pas remplacer la méthode du démosturule inc code> dans le démosturule code> appelle la méthode l.validate code> où l est un Démostructeur code >. La réception de cette méthode est explicitement explicitement un Démostructeur code>. Donc, la méthode mockdemostruct.validate code> ne sera pas appelée. P>
code>. Le Mockdemostructeur code> compose le démosturule code>. Pour tester cette méthode, je suggère de transmettre le Démostructeur code> une interface DB, qui peut être moquée dans votre test. P>
Merci pour votre commentaire, pouvez-vous suggérer une restructuration de code qui peut activer la moqueur de la méthode de validation avec NUM> 100 logique seulement
Si vous créez une interface pour votre interaction DB, vous pouvez transmettre cette interface à votre Démostructeur code>. Dans votre test, vous pouvez ensuite vous moquer de l'interaction de la base de données afin que vous ne puissiez tester que la logique num> 100 code>.
Je pense que vous devez également implémenter "Inc" récepteur pour "Mockdemostruct", vous essayez ici de dépasser la propriété d'héritage de la structure, on dirait que Go ne supporte pas cela. P>
Pour rendre la méthode moqueuse, nous devrons utiliser un motif de code DI (injection de dépendance).
func Validate(num int) error {
if num > 100 {
return fmt.Errorf("INVALID NUM %v", num)
}
return nil
}
type DemoStruct struct {
Validate func(num int) error // function as a type
}
func (l DemoStruct) Inc(num int) (int, error) {
err := l.Validate(num)// It can be replaced in test cases.
if err != nil {
return 0, err
}
num = num + 100
return num, nil
}
func main() {
s, err := DemoStruct{Validate: Validate}.Inc(10) // assign Validate inside DemoStruct
if err != nil {
fmt.Println(err)
}
fmt.Println(s)
}