Question

Je viens de lire ce poste et il fait le cas contre la saisie implicite à l'aide lors du démarrage avec le développement piloté par les tests / conception.

Son message dit que TDD peut être « ralenti » lors de l'utilisation en tapant implicite pour le type de retour lorsque l'appareil test d'une méthode. En outre, il semble vouloir le type de retour spécifié par le test afin de stimuler le développement (ce qui me semble logique).

Une donnée test unitaire avec le typage implicite pourrait ressembler à ceci:

public void Test_SomeMethod()
{
    MyClass myClass = new MyClass();

    var result = myClass.MethodUnderTest();
    Assert.AreEqual(someCondition, result);
}

Alors mes questions sont:

N'utilisant l'aide de frappe implicite ou entraver les tests unitaires d'écriture pour TDD? Est-ce qu'il ya quelqu'un qui peut partager son expérience avec cette technique lors de l'écriture des tests unitaires?

Je demande cela parce que bientôt je ne l'ai pas fait TDD et que vous voulez savoir s'il y a un moyen d'écrire des tests unitaires génériques ou semi-génériques qui travailleraient un type de retour pourrait changer.

Était-ce utile?

La solution

Je vois son point, mais je ne pense pas vraiment que c'est la bonne raison de ne pas utiliser var ici. Rappelez-vous, TDD fonctionne à peu près selon les critères suivants:

  1. Ecrire un nouveau test.
  2. Si le test ne peut pas compiler (et il tombe en panne!), Écrire un code assez jusqu'à ce que le test compile.
  3. Exécuter tous les tests.
  4. Si un test échoue, écrire un code assez lorsque tous les tests.
  5. Refactor.

Si oui ou non, nous utilisons var le test ne parviendra pas à compiler de toute façon parce que la méthode à l'essai ne seront pas encore !. Une fois que nous commençons à coder en NewMethod ses points sont plutôt discutable.

Au contraire, la bonne raison de ne pas utiliser var ici est parce que le code ne donne aucune indication que le type de result est. Ceci est une question d'opinion, mais var est bien ici

var dict = new Dictionary<Foo, List<Bar>>();

et pour les types anonymes, mais pas ici

var m = M();

car il est tout à fait clair sans aller à la déclaration de M (ou en utilisant IntelliSense) ce que le type de retour de M est.

Autres conseils

Oui et Non

Dans Visual Studio actuellement, TDD est un peu d'une douleur, en particulier lors de l'utilisation typage implicitement. var signifie pas IntelliSense, lorsque vous entrez le nom d'un type qui ne peut pas exister mais il a tendance à l'auto-complétion avec quelque chose qui est similaire à ce que vous tapez souvent le nom de l'appareil de test.

Visual Studio 2010 a une consommer premier mode , ce qui le rend idéal et mieux pour le test Driven Development. vous trouverez actuellement (en 2008 et plus tôt), vous devez frapper échapper pour cacher IntelliSense.

En ce qui concerne l'utilisation de var il est purement sucre synatic. Il fait ce qui suit beaucoup plus agréable à mon avis:

var type = new MyType();

Son clair que le type de variable, est de type MyType. var est grande pour les médicaments génériques et suit la prinicple de DRY -. Ne pas répéter vous-même

var type = MethodCall();

var result = ReturnResult();

Par contre, ce qui rend pour le code difficile à lire, si vous suivez TDD ou non. De bons tests unitaires devraient flux et être faciles à lire. Si vous devez penser, ou passer la souris sur une méthode pour voir le type de retour, ce qui est le signe d'une mauvaise, difficile à lire test.

Du point de vue de l'outillage, je dirais qu'il est plus agréable d'éviter le var. J'utilise Eclipse et Java, mais je sais que des extensions comme CodeRush et ReSharper offrent de nombreuses fonctionnalités que je discutons ici. Quand dans mon test, j'appelle une méthode qui n'existe pas encore, je peux « solution rapide » pour créer la méthode dans la classe désirée. Le type de retour de la méthode créée automatiquement dépend de son contexte; si je me attends de retour d'une chaîne, le type de retour de la méthode sera String. Mais si la cession est à un var (Java qui n'a pas - mais si elle l'a fait)., L'IDE ne sais assez pour faire quoi que ce soit le type de retour autre que var (ou peut-être l'objet)

Tout le monde utilise l'IDE de cette manière dans TDD, mais je trouve cela très utile. Plus d'informations que je peux donner l'IDE dans mon test, moins taper que je dois faire pour faire passer le test.

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