Converting MSpec tests to plain NUnit

bdd, comparison, mspec, nunit, tdd

Solution

I generally would recommend against converting from MSpec to NUnit. When introducing people to MSpec I like to start with a "classic" NUnit (`PersonRepositoryTester.TestAddNewPerson`) fixture, convert it over to a more BDDish fixture like the one below and then show them how MSpec can help to reduce language noise and introduce readability + better reporting.

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

Problem

I am trying to get started with pure TDD and also consider the BDD flavor. I am trying to grasp, how writing unit tests with MSpec feels in contrast pure to NUnit. Consider a simple MSpec test like the following: ``` [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; } ``` How would you convert this to NUnit in a clean way but without using any BDD extensions or anything. I think that it is a good idea that each should assertion to be one separately runnable test and `Establish` and `Because` should be executed just once for all should assertions. I could use `[Setup]` for `Establish` and `Because`, but that would be run for each test. I could use `Assert.` for `It` but that wouldn't make them separately runnable tests. How would this example contrast to NUnit style?

Original source