0
votes

Vérifier l'ordre des moqueurs d'appel

J'utilise témoigner code> (v1.6.1) et besoin de test fort> si les méthodes d'interfaces appellent dans l'ordre correct. J'ai vérifié le Documentation et essayé de trouver des informations sur Internet, mais 'T Trouvez n'importe quoi sur la vérification des moqueurs de l'ordre.

Exemple: p>

type Composition struct {
    a InterfaceA
    b InterfaceB
}

func (c * Composition) Apply() error {
    //How to check that "a" execute before "b"?
    c.a.Execute()
    c.b.Execute()
    return nil
}


0 commentaires

3 Réponses :


1
votes

Ceci n'est pas directement pris en charge, même s'il existe une question ouverte ( STRETTR / TESTIFIER / NUMÉRO 741 "affirmer des appels simulés dans l'ordre" )

La question plus générale 684 "Affirmez la commande d'appel?" inclut la réfutation:

imo Vous devriez vérifier la sortie de la fonction mais pas comment cela fonctionne en interne. Cela peut conduire à tester la mise en œuvre qui est très difficile à maintenir.

Bien que, dans le même thread:

IMO Il y a des cas pour faire respecter l'ordre. I.E Si vous vous moquez d'un mutex, vous feriez mieux de vérifier que la serrure a toujours été appelée avant de déverrouiller.
Nous pouvons avoir une implémentation simple dans laquelle la simulation a un " asserStexpectationnorderner " true / faux drapeau pouvant être défini avant que toutes les attentes soient ajoutées.

Ceci peut conduire à un test comme Cassandra -opérateur / cmd / opérateur / contrôleur_test.go qui enregistre les événements pour tester leurs commandes.


0 commentaires

0
votes

IMO Il y a des cas pour faire respecter l'ordre. I.e Si vous vous moquez d'un mutex, vous feriez mieux de vérifier que la serrure a toujours été appelée avant de déverrouiller.

C'est une simple réalisation de fil unique: xxx

Aire de jeu

S'il y a des raisons, vous pouvez compliquer la commande de la commande de la commande ...


1 commentaires

Cela ressemble à une bonne mise en œuvre de l'idée que j'ai mentionnée. Upvoted.



0
votes

Comme d'autres l'ont dit, il s'agit d'un détail interne et empêche vos tests avec la mise en œuvre. Cela signifie rien si vous avez déterminé que la commande compte. Garder les choses succinctes Voici une autre solution en utilisant le strict minimum pour le test de test.

créer deux espions qui implémentent interfacea et interfaceb. xxx

puis utilisez-les comme ceci. xxx

Aire de jeu


2 commentaires

S'il vous plaît, réécrivez l'exemple comme test


@kozmo pour les tests Il suffit de remplacer le principal avec une fonction de test. J'ai mis à jour la solution avec un exemple de fonction de test.