我正在尝试使用纯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扩展或任何其他方式。我认为这是一个好主意,每个应该断言都是一个单独的可运行测试,并且EstablishBecause应该对所有应断言只执行一次。我可以将[Setup]用于EstablishBecause,但这将在每次测试中运行。我可以将Assert.用作It,但这不会使它们分别运行。

这个例子与NUnit风格有何不同?

最佳答案

我通常建议不要将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);
    }
}

关于tdd - 将MSpec测试转换为纯NUnit,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4381063/

10-09 13:30