2010-12-07 63 views
3

J'essaie de commencer avec le TDD pur et je prends également en compte la saveur BDD. J'essaie de saisir, comment les tests unitaires d'écriture avec MSpec se sentent en contraste pur à NUnit.Conversion des tests MSpec en NUnit simple

Tenir compte d'un simple test MSpec comme ce qui suit:

[Subject("PersonRepository")] 
class when_adding_a_new_person 
{ 
    Establish context =() => sut = new PersonRepository(); 

    Because of =() => sut.AddPerson("Jim", "Panse"); 

    It should_have_a_person = sut.Count.ShouldEqual(1); 
    It should_have_that_persion = sut.Contains("Jim", "Panse"); 

    static PersonRepository; 
} 

Comment voulez-vous convertir en NUnit d'une manière propre mais sans utiliser des extensions BDD ou quoi que ce soit. Je pense que c'est une bonne idée que chacun devrait affirmer être un test runnable séparément et Establish et Because devrait être exécuté une seule fois pour toutes les assertions devrait. Je pourrais utiliser [Setup] pour Establish et Because, mais cela serait exécuté pour chaque test. Je pourrais utiliser Assert. pour It mais cela ne les rendrait pas séparément tests exécutables. Comment cet exemple contrasterait-il avec le style NUnit?

Répondre

7

Je recommanderais généralement contre la conversion de MSpec à NUnit. Lorsque vous présentez des personnes à MSpec, j'aime commencer avec un appareil "classique" NUnit (PersonRepositoryTester.TestAddNewPerson), le convertir en un appareil plus BDDish comme celui ci-dessous, puis montrer comment MSpec peut aider à réduire le bruit du langage et améliorer la lisibilité. .

[TestFixture] 
public class When_adding_a_new_person 
{ 
    PersonRepository sut; 

    [TestFixtureSetUp] 
    public void Establish_and_because() 
    { 
     sut = new PersonRepository(); 

     sut.AddPerson("Jim", "Panse"); 
    } 

    [Test] 
    public void It_should_have_one_person() 
    { 
     Assert.That(sut.Count, Is.EqualTo(1)); 
    } 

    [Test] 
    public void It_should_contain_the_new_person() 
    { 
     Assert.That(sut.Contains("Jim", "Panse"), Is.True); 
    } 
}