Question

Dans le livre de Roy Osherove [Test Unit] [1] livre, il explique qu'un seul test unitaire doit contenir entre 0 et 1 se moque. Il suggère que si votre test n'est pas sur la maquette d'affirmer, alors ne pas utiliser une maquette du tout. Il démontre également comment utiliser un cadre d'isolement pour produire des souches, qui ont été créés de façon similaire aux simulacres. Il ne place aucune limite sur le nombre suggéré de talons créés par test.

Ma question est la suivante: ces recommandations peuvent être appliquées à tous les cadres d'isolement (ou tous les cadres populaires C #)? Autrement dit, est-il un cadre qui peut générer seulement se moque - pas des talons? Y at-il un cadre d'isolement qui ne fait pas la distinction se moque de talons?

Je suis curieux de voir comment facile les recommandations Osherove peuvent être converties en normes de codage.

[1]: http: // le système sous test est même pas testé du tout, au lieu de se moque données renvoyées est ce qui est testé.

Était-ce utile?

La solution

Il y a des cadres comme Moq qui ne les distinguent pas. FakeItEasy va encore plus loin et appelle des objets tout faux.

Oui, ils peuvent être appliqués, car simulacres sont des talons tout simplement plus intelligents. Peu importe que beaucoup si stub est appelée aussi fausse que tant que vous ne prétendez pas plus d'une maquette. Cette recommandation est-à-dire plus sur l'affirmation qu'une seule chose par test. La distinction se moque et Explicitement talons ne sont pas si important que cela.

Autres conseils

Cela correspond directement à la recommandation Osherove que vous effectuez une seule assert par test. Dans son lexique une stub est une classe qui fournit l'entrée faux au système en cours de test, alors qu'un mock est une classe qui vous permet de tester la sortie du système en cours de test (en utilisant une fausse classe).

Si un cadre utilise une convention de dénomination similaire est à ses concepteurs, mais la norme (si vous êtes d'accord avec sa recommandation) devrait être qu'une seule assert est réalisée par test, et où l'affirmation exige un objet faux - que seul un objet faux doit être testé par test.

Bien sûr, pas tout le monde est d'accord avec sa recommandation, donc tout le monde ne fait de cette façon.

Philip Calçado a récemment écrit à ce sujet: http://fragmental.tw/2010/12/14/one-mock-per-test-considered-not-awesome/ . En bref, il dit qu'en se concentrant sur le nombre se moque / talons il y a dans votre test, vous détourne de ce qui devrait être la principale préoccupation. Écrit de bonnes spécifications

> can those recommendations 
> [a single unit test should contain between 0 and 1 mocks] 
> be applied to all isolation frameworks ?

Je pense: La plupart du temps Oui si vous assumez ces définitions

  • UnitTest = test dans l'isolement (sinon ce n'est pas un UnitTest)
  • Un UnitTest pour une caractéristique
  • un talon ou faux est un objet pour permettre l'isolement mais qui n'a pas de fonction de vérification et
  • une maquette est un bout avec une fonctionnalité supplémentaire qui permet également la vérification

J'utilise Moqfor mon Mocking Obtenez ici

Je ne sais pas exactement ce que vous entendez par « stubbing », mais je suppose que c'est probablement quelque chose comme Moles from Microsoft qui est assez cool.

Les deux sont vraiment intéressant et très facile à utiliser.

Ce genre de règle doit être considérée comme une « formation Roues ». De toute évidence, un test qui comprend de nombreux talons et se moque a perdu l'intrigue, mais en insistant sur une affirmation ou l'attente par test est trop restrictive. Comme le lien Calçado fait référence souligne, ce qui importe est qu'il ya un Concept par test, ce qui pourrait impliquer quelques affirmations ou les attentes pour faire le point. La dernière chose que vous devez faire est de faire respecter une telle norme.

Une autre chose, nous devrions vraiment parler de « attentes » ici, des interactions individuelles, plutôt que des objets fantaisie entiers. Dans la pratique, ils sont souvent les mêmes, mais il brouille les concepts.

J'utilise Rhino maquette pour mon test en C #. Vous pouvez générer des simulacres ou des talons avec elle. Je vous encourage à jeter un oeil sur ce cadre: http://www.ayende.com/ projets / rhino-mocks.aspx

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top