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