使用BDD样式的测试

时间:2010-07-05 10:50:53

标签: c# bdd

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

4 个答案:

答案 0 :(得分: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,因为它更喜欢它我喜欢它。使我更容易编写描述性测试而无需使用上下文继承。

答案 1 :(得分:2)

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

在测试中,我经常将评论写为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
}

然后我填写评论之间的代码。如果测试非常简单,我可以跳过评论。

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

答案 2 :(得分:1)

这个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

答案 3 :(得分:0)

您还可以查看BDD for C# NUnit。一种替代方法是使用一些C#库,这些库有助于编写具有可读描述的BDD式单元测试。