9
votes

Quand utiliser des talons et se moque?

J'ai cette confusion tout le temps. Si j'écris un code qui utilise un faux code pour affirmer une opération, comment puis-je faire confiance à ma réelle implémentation lors de son démarrage à l'aide des objets réels au lieu de faux.

Par exemple, j'ai ce code - P>

    [Test]
    public void CanCreateContactsWithData()
    {
        using(ISession session = factory.OpenSession())
        using (ITransaction trans = session.BeginTransaction())
        {
            _contactId = (long) session.Save(contact);
            trans.Commit();
        }

        Assert.AreNotEqual(0, _contactId);
    }


0 commentaires

5 Réponses :


0
votes

Oui, l'utilisation d'une bonne base de données serait plus fonctionnelle ou d'essai d'intégration, en fonction de votre définition. Personnellement, je pense que les tests d'unités sont censés tester exactement cette méthode uniquement, isolément de tout le reste. De sorte que la session ou la transaction fonctionne ou non, votre test de l'unité doit s'assurer que ces objets seront appelés seront appelés à faire leur travail quand et si nécessaire - c'est là que des moqueurs et des talons arrivent. Vous Utilisez-les pour vous assurer que votre test de l'unité est aussi découplé de la fonctionnalité externe afin qu'elle puisse être testée comme une unité de base; Idéalement de toute façon.


2 commentaires

Serait-il possible d'élaborer vos réponses avec quelques exemples .. Merci d'avance


C'est une longue réponse, mais jetez un coup d'œil à MockObjects.com/book (excuses pour la fiche).



2
votes

Vous devez tester le code que vous avez écrit. Si vous avez écrit le code d'objet de connexion de la base de données, testez-le. Sinon, si cela fait partie d'une bibliothèque avec ses propres tests, vous pouvez simplement vous moquer / supporter et supposer que si l'objet de connexion transmet sa propre suite de test, il fonctionne.

Par exemple, je ne testerais pas les appels aux méthodes d'hibernation, je suppose que les développeurs Hibernate ont déjà testé cela. Mais je le testerait que j'appelle la méthode correcte, en utilisant une simule pour configurer cette attente.


0 commentaires

3
votes

Vous utilisez des talons lorsque vous voulez juste une fonction pour renvoyer une certaine valeur (ou ne rien faire). Vous ne vous souciez pas vraiment si la fonction a été appelée ou non, vous voulez simplement isoler les choses.

Les simulacres sont plus puissants, car vous pouvez également garder une piste si la fonction a été appelée, combien de fois, et même faire des choses avec des valeurs de votre fonction.

Dans votre cas, si vous voulez vous moquer de la base de données (il devient donc un test unitaire plutôt que fonctionnel), vous pouvez vous moquer de l'isession et de l'itransaction. Vous pouvez ensuite stocker ces valeurs en mémoire et vérifier si les valeurs correctes ont été enregistrées.


0 commentaires

0
votes

La plupart des types de tests d'unités consiste à tester des morceaux de code individuels, et des talons et des simulacres sont simplement des outils qui vous aident à tester la pièce à pièces. En testant des pièces individuellement, vous pouvez probablement tester chaque pièce plus en détail, mais vous ne serez rien garanti sur la photo complète. Différents types de tests d'intégration feront cela.

Lorsque vous testez des morceaux de fonctionnalité plus importants, je trouve souvent des tests d'intégration réels de la logique de base de données comme des artefacts de test les moins utiles, car vous testerez souvent ces mêmes opérations au niveau de l'interface utilisateur.


0 commentaires

18
votes

Martin Fowler a une bonne discussion ici .

de son article:

Meszaros utilise le test de test double comme terme générique pour tout type d'objet prétend utilisé à la place d'un objet réel à des fins de test. Le nom vient de la notion d'un doublé de cascade dans les films. (Un de ses objectifs était d'éviter d'utiliser n'importe quel nom déjà utilisé.) Meszaros a ensuite défini quatre types particuliers de double:

  • Les objets factices sont passés autour mais jamais réellement utilisé. Ils sont généralement utilisés pour remplir les listes de paramètres.
  • Les faux objets ont en réalité des implémentations de travail, mais prennent généralement un raccourci qui les rend pas appropriés pour la production (une base de données en mémoire en mémoire est un bon exemple).
  • Les talons fournissent des réponses en conserve aux appels effectués lors du test, ne répondent généralement pas du tout à quelque chose à l'extérieur de ce qui est programmé pour le test. Les talons peuvent également enregistrer des informations sur les appels, tels qu'un talon de passerelle électronique qui se souvient des messages qu'il a été "envoyé", ou peut-être que le nombre de messages qu'il "envoyé".
  • Mocks est ce dont nous parlons ici: les objets pré-programmés avec des attentes qui forment une spécification des appels qu'ils devraient recevoir.

    de ces types de doubles, seulement se moque d'insister sur la vérification du comportement.


0 commentaires