0
votes

Méthode moquée ne fonctionne pas à Golang lors de l'exécution des cas de test

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 Méthode ici: ` xxx

`

Mes cas de test: xxx

ici mockdemostruct.validate n'est pas appelé. Je reçois Num 110 non valide de valider, mais il devrait être error simulé 110


0 commentaires

3 Réponses :


1
votes

Dans ce cas, la méthode inc dans le démosturule appelle la méthode l.validate où l est un Démostructeur . La réception de cette méthode est explicitement explicitement un Démostructeur . Donc, la méthode mockdemostruct.validate ne sera pas appelée.

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 . Le Mockdemostructeur compose le démosturule . Pour tester cette méthode, je suggère de transmettre le Démostructeur une interface DB, qui peut être moquée dans votre test.


2 commentaires

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 . 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 .



0
votes

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.


0 commentaires

1
votes

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)

}


0 commentaires