【问题标题】:Using BDD style of tests使用 BDD 风格的测试
【发布时间】:2021-05-12 14:12:59
【问题描述】:

当使用 BDD 进行更高级别的测试时,测试中的这种语言 - given,when,then 似乎很容易理解。我正在使用 C#。所以,我所做的就是将类命名为“whenthishappens”,setup 是“给定”,然后我有测试。但是,在为类方法编写测试时如何使用这种风格的 BDD。或者,我应该只使用名为“shouldDoXXX”的测试吗?

【问题讨论】:

标签: c# bdd


【解决方案1】:

我通常将我的测试命名为shouldDoXXXX,其中测试名称描述了它应该为所有类似的上下文做什么。所以我可能会说shouldAddUpTwoNumbersCorrectly。这与许多 BDDers 的做法有些不同 - Ruby 人群似乎特别喜欢 shouldAddTwoPlusTwoToMakeFour,因此重复他们使用的特定示例。哪个适合你!

在测试里面,我经常把cmets写成Given/When/Then:

public void ShouldAddUpTwoNumbersCorrectly() 
{
    // Given two numbers
    // When I give them to the summer
    // Then the result should be the sum of the two numbers
}

然后我填写cmets之间的代码。如果测试很简单,我可以跳过 cmets。

我不会为课堂测试使用英语可读的框架,因为观众是技术人员并且能够阅读代码。创建 Given / When / Then 的 BDD 框架主要是为了帮助与非技术利益相关者进行对话,并鼓励开发人员使用他们的语言。我发现它们在课堂上没有用。 YMMV。

【讨论】:

    【解决方案2】:

    这是我写的关于基于 MSTest 的代码的 BDD 样式测试的博客:

    http://mrclyfar.blogspot.com/2010/02/amazing-mapping-demo-at-ted-2010.html。我使用了来自 blog 帖子的想法。

    我个人使用StoryQ 进行测试。 StoryQ 是一个类似于 MSpec 和 SpecFlow 的测试框架,因为您可以以更具描述性的方式编写测试。一开始,我确实尝试对 MSTest 样式代码使用 BDD 命名,但我发现它没有我想要的那么灵活。然后我尝试了 MSpec,这很棒。

    最后我选择了 StoryQ,因为它有一点我喜欢的冗长。让我可以更轻松地编写描述性测试,而无需使用上下文继承。

    【讨论】:

    • 那么,当你为一个类编写单元测试时,你使用 given\when\then 格式吗?所以,你将有多个类来测试一个类,因为什么时候代表一个场景
    • 是的,对于when 场景,您将有多个类。这是我在 Eric Lee 博客文章中描述的建议做法。
    • 我刚刚进入 StoryQ。并且,能够编写测试。我正在使用 MBUnit Gallio 运行测试。但是,我在故事格式的任何地方都看不到描述性输出
    • 我认为 StoryQ 的输出不适用于 Gallio。我只能在我的 MSTest 输出窗口或 Resharper 测试运行器中看到描述性文本。我不加里奥支持 StoryQ。
    • 只需使用“ExecuteWithReport”,看看生成的报告文件:)
    【解决方案3】:

    这个 C# 框架完全符合您的要求,并允许您使用 IWantTo 开始您的测试方法名称

    public void IWantTo...()
    

    它是开源的,可以在

    找到

    转换这个...

    [Test]
    public void IWantToRegisterANewUser()
    {
      ICustomer customer = new Customer();
    
      SoThat(MyBusinessValue.IncreaseCustomerBase)
        .As(new User())
        .Given(customer.Register)
        .When(customer.Confirm_Registration)
        .Then(customer.Login);
    }
    

    到这个...

    I want to register a new user
      So that Increase customer base
           As user
        Given Register customer
         When Confirm customer registration
         Then Login customer
    

    【讨论】:

      【解决方案4】:

      您还可以查看BDD for C# NUnit。另一种方法可能是使用一些 C# 库,它们有助于编写具有可读描述的类似 BDD 的单元测试。

      【讨论】:

        猜你喜欢
        • 2014-05-19
        • 2016-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多