Création d'une fonction de cartographie à travers TDD: Tests d'écriture Trop de temps passé?

StackOverflow https://stackoverflow.com/questions/2078321

  •  21-09-2019
  •  | 
  •  

Question

Je suis un grand passionné de TDD, et nous essayons d'écrire des tests avant d'écrire le code de production pour assurer un comportement correct du code que je vous écris. De temps en temps, cependant, plusieurs questions s'il est prudent d'écrire un grand nombre de tests pour certains types de méthodes. Cela semble venir le plus souvent lors de l'écriture d'une classe Mapper.

public class FooBarMapper
{
    public Foo MapToFoo(Bar bar)
    {
        return new Foo
        {
            Id = bar.Id,
            Name = bar.Name,
            FooYuk = bar.Beverage,
            /* ... */
        };
    }
}

Dites par exemple qu'il ya une douzaine de propriétés ci-dessus pour cartographier. Dans un environnement TDD, avant d'écrire des correspondances, je serais probablement écrire un test. Quelque chose comme MapToFooMapsBeverageToFooYuk(). Le test échoue, m'a amené à écrire le code pour le faire passer. Je le répète pour chaque propriété à la carte. La question est: Est-ce la prise de test premier développement trop loin? Je ne pense pas personnellement, comme je préfère avoir une suite complète de tests me dire exactement ce que fait le code, mais je voudrais savoir ce que pense la communauté.

Était-ce utile?

La solution

Même l'oncle Bob Martin, un fervent défenseur de TDD et toutes les choses TDD, dit que vous n'avez pas à écrire des tests unitaires pour chaque propriété triviale (une propriété trivial étant définie comme une propriété qui obtient juste et définit une variable membre ).

Si jamais vous écrivez une propriété qui a des effets secondaires (ce dont je doute vous), puis vous pouvez ajouter un test unitaire à elle. Comme DuffyMo souligne, si vos propriétés sont couvertes par les tests fonctionnels, il devrait y avoir aucun besoin pour les tests unitaires, car il n'y a pas de spécification de fonctionnalités que vous définissez avec le test unitaire, autre que le get trivial / set.

Autres conseils

Peut-être que c'est ce que FitNesse est né pour.

Dans ce cas, j'écrire un seul test qui teste toutes les propriétés triviales à la fois. Ce n'est pas tout à fait la manière standard de faire des choses, mais finalement, les tests de propriétés individuelles triviaux serait probablement en un seul refactorisé test pour toutes les propriétés. Étant donné que les propriétés sont triviales, je vous propose de commencer avec le test que vous auriez terminé avec.

Après avoir décortiqué les trois premières propriétés, je voyais la duplication et le remplacer par itérer sur les propriétés et les assigner en utilisant la réflexion. Cela n'a besoin que quelques tests: 0 propriétés, 1, 5 propriété propriétés, objet cible ne possède pas les propriétés attendues, objet source ne possède pas les propriétés attendues. Maintenant, je peux réutiliser ce moteur de cartographie générale partout ailleurs dans toutes mes applications et je n'ai pas de vérifier chaque fois que je l'utilise.

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