3

私は純粋な TDD から始めようとしていますが、BDD フレーバーも検討しています。私は、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 に変換するにはどうすればよいでしょうか。Establishそれぞれのアサーションを 1 つの個別に実行可能なテストにし Because、すべてのアサーションに対して 1 回だけ実行するのは良い考えだと思います。[Setup]forEstablishと を使用できますBecauseが、それはテストごとに実行されます。Assert.forを使用できますItが、個別に実行可能なテストにはなりません。

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

4

1 に答える 1

7

私は通常、MSpec から NUnit に変換しないことをお勧めします。人々に MSpec を紹介するとき、私は「クラシックな」NUnit ( PersonRepositoryTester.TestAddNewPerson) フィクスチャから始めて、それを以下のようなより BDD っぽいフィクスチャに変換してから、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);
    }
}
于 2010-12-08T00:19:03.483 に答える