Преобразование тестов MSpec в обычный NUnit - PullRequest
3 голосов
/ 07 декабря 2010

Я пытаюсь начать с чистого 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;
} 

Как бы вы преобразовали это в NUnit чистым способом, но без использования каких-либо расширений BDD или чего-либо еще. Я думаю, что это хорошая идея, что каждое утверждение должно быть одним отдельно выполняемым тестом, а Establish и Because должны выполняться только один раз для всех утверждений. Я мог бы использовать [Setup] для Establish и Because, но это будет выполняться для каждого теста. Я мог бы использовать Assert. для It, но это не сделало бы их отдельно запускаемыми тестами.

Как этот пример будет контрастировать со стилем NUnit?

1 Ответ

7 голосов
/ 08 декабря 2010

Я бы вообще не рекомендовал переходить с 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);
    }
}
...