那些测试框架的“风格”是什么?

时间:2012-07-21 07:02:16

标签: unit-testing testing tdd bdd

在我看来,自SUnit,JUnit和常见的xUnit测试框架以来,测试已经走过了漫长的道路。

我查看RSpecCucumber以了解“行为驱动”测试的内容,但现在我确实想知道编写单元测试的其他方法是什么。

我不依赖于任何特定语言,但对测试代码的一般想法和方法更感兴趣。

所以,我的问题是,在单元测试方面存在风格上不同的方法,即与“断言”不同的方法。

让我举个例子:

单元测试的xUnit样式在您喜欢的语言中看起来大致相同:

stack = new Stack()
assertTrue  (stack.empty())

stack.push(1)
assertFalse (stack.empty())
assertEquals(1, stack.top())

RSpec风格的单元测试看起来很像(大致即兴创作):

describe Stack do

  it "should be empty" do
    Stack.new.empty?.should == true
  end

  it "should contain new value on top" do
    stack = Stack.new
    stack.push(1)
    stack.empty?.should == false
    stack.top().should == 1
  end
end

还有其他有趣的风格,符号,“DSL”吗? 当然,每种语言和框架都会有不同的主题,但是有不同的一般“主题”/风格吗?

2 个答案:

答案 0 :(得分:1)

我只能想到两种测试方式。代码为中心(xUnit和RSpec给出上面的代码)和行为中心(黄瓜,SpecFlow - 给定/然后/当)。 现在,您可以在以代码为中心的框架(代码#1)中执行行为样式测试。

您还有三种类型的测试:

  • 模仿者 - 大多数依赖项都是(严格地)嘲笑的。
  • Stubbists - 大部分依赖项都是存根的。
  • 集成 - 大部分依赖都是真实的。

代码#1:

@Test
public void theScenarioDescription() {
    givenThatSomething();
    whenIWiggleIt();
    thenSomethingHasHappened();
}

答案 1 :(得分:0)

我个人非常喜欢Given,When,Then类型语法进行测试。

Given some particular situaion
When some action occurs
Then there will be an outcome that can be verified.

我开始使用这种方法,使用.NET上的StoryQSpecFlow等工具,这些工具非常整洁。我从那以后开始编写自己的little framework,这更适合我个人的风格,但还不是特别成熟。