2010-12-07 8 views
3

純粋なTDDを使い始めようとしていて、BDDフレーバも検討しています。私は把握しようとしている、どのようにユニットテストを書いてMSpecと対照的に純粋にNUnitに感じる。MSpecテストをプレーンNUnitに変換する

は、次のような単純なMSpecテストを考えてみましょう:

[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; 
} 

あなたはきれいな方法ではなく、任意のBDDの拡張や何かを使用せずにNUnitのにこれを変換するだろうか。私は、それぞれが個別に実行可能なテストであることをアサートするべきであり、EstablishBecauseをすべての必要なアサーションに対して1回だけ実行することをお勧めします。 EstablishBecause[Setup]を使用できますが、これは各テストで実行されます。私はAssert.Itに使うことができましたが、別々に実行可能なテストにはなりませんでした。

この例は、NUnitスタイルとはどのように対照的ですか?

答えて

7

私は通常、MSpecからNUnitに変換することをお勧めします。人々をMSpecに紹介する際には、「古典的な」NUnit(PersonRepositoryTester.TestAddNewPerson)のフィクスチャから始め、以下のようなBDDishのフィクスチャに変換し、MSpecがどのように言語ノイズを軽減し、 。

[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); 
    } 
} 
関連する問題