2010-07-05 7 views
1

Lorsque vous utilisez BDD pour un niveau de test plus élevé, alors ce langage dans les tests - donné, quand, alors semble facile à comprendre.J'utilise C# .So, ce que je fais, c'est nommer la classe comme "whenthishappens ", l'installation est le" donné ", et puis j'ai des tests.Mais, comment utiliser ce style de BDD lors de l'écriture de tests pour une méthode de classe.Ou, devrais-je avoir juste des tests nommés" shouldDoXXX ".Utilisation du style BDD des tests

+0

Avez-vous envisagé un des cadres BDD disponibles pour .NET? Voir http://stackoverflow.com/questions/307895/what-is-the-most-mature-bdd-framework-for-net – bjg

Répondre

2

Je nomme normalement mes tests shouldDoXXXX où le nom du test décrit ce qu'il doit faire pour tous les contextes similaires. Donc, je pourrais dire shouldAddUpTwoNumbersCorrectly. C'est un peu différent de la façon dont beaucoup de BDDers le font - la foule Ruby semble particulièrement aimer shouldAddTwoPlusTwoToMakeFour, répétant ainsi l'exemple particulier qu'ils utilisent. Celui qui travaille pour vous!

A l'intérieur du test, je vous écris souvent des commentaires comme données/Quand/Puis:

public void ShouldAddUpTwoNumbersCorrectly() 
{ 
    // Given two numbers 
    // When I give them to the summer 
    // Then the result should be the sum of the two numbers 
} 

Puis-je remplir le code entre les commentaires. Si le test est très simple, je peux sauter les commentaires.

Je ne me soucie pas des frameworks lisibles en anglais pour un test en classe, parce que le public est technique et capable de lire du code. Les frameworks BDD qui donnent Given/When/Then ont été créés en grande partie pour faciliter les conversations avec des parties prenantes non techniques, et pour encourager les développeurs à utiliser leur langue. Je ne les trouve pas utiles au niveau de la classe. YMMV.

2

Voici un blog que j'ai écrit au sujet des tests de style BDD pour le code basé MSTest:

http://mrclyfar.blogspot.com/2010/02/amazing-mapping-demo-at-ted-2010.html. J'ai utilisé des idées de ce poste blog.

Personnellement, j'utilise StoryQ pour mes tests. StoryQ est un framework de test similaire à MSpec et SpecFlow, dans lequel vous pouvez écrire vos tests de manière plus descriptive. Au début, j'ai essayé d'utiliser le nommage BDD pour le code de style MSTest, mais je l'ai trouvé moins flexible que je le voulais. J'ai ensuite expérimenté avec MSpec, ce qui est génial. En fin de compte, j'ai choisi StoryQ car il avait un peu plus de verbosité à ce sujet que j'aime. Cela me facilite la tâche d'écrire des tests descriptifs sans avoir à utiliser l'héritage contextuel.

+0

Ainsi, lorsque vous écrivez un test unitaire pour une classe, vous utilisez given \ when \ then format? Ainsi, vous aurez plusieurs classes pour tester une classe, puisque quand représente un scénario – jess

+0

Oui, vous auriez plusieurs classes pour les scénarios 'quand '. C'est la pratique suggérée décrite dans le blog Eric Lee que j'ai donné. –

+0

Je viens de plonger dans StoryQ.Et, a été en mesure d'écrire test.J'utilise MBUnit Gallio pour exécuter des tests.Mais, je ne vois pas la sortie descriptive nulle part dans le format de l'histoire – jess

1

Ce C cadre # fait exactement ce dont vous avez besoin, et vous permet de lancer vos noms de méthode de test avec IWantTo

public void IWantTo...() 

Il est open source et trouvé à

Convertit ceci ...

[Test] 
public void IWantToRegisterANewUser() 
{ 
    ICustomer customer = new Customer(); 

    SoThat(MyBusinessValue.IncreaseCustomerBase) 
    .As(new User()) 
    .Given(customer.Register) 
    .When(customer.Confirm_Registration) 
    .Then(customer.Login); 
} 

à cette ...

I want to register a new user 
    So that Increase customer base 
     As user 
    Given Register customer 
    When Confirm customer registration 
    Then Login customer