【问题标题】:Converting MSpec tests to plain NUnit将 MSpec 测试转换为普通 NUnit
【发布时间】:2010-12-07 20:07:18
【问题描述】:

我正在尝试开始使用纯 TDD 并考虑 BDD 风格。我试图理解,与纯粹的 NUnit 相比,使用 MSpec 编写单元测试的感觉如何。

考虑一个简单的 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 风格有何对比?

【问题讨论】:

    标签: tdd comparison nunit bdd mspec


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 2012-01-31
      • 2021-06-23
      • 2016-06-24
      相关资源
      最近更新 更多