我正在尝试开始使用纯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风格的对比如何?
答案 0 :(得分: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);
}
}