【问题标题】:What 'styles' of testing frameworks are out there?有哪些“风格”的测试框架?
【发布时间】:2012-07-21 07:02:15
【问题描述】:

在我看来,自 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”吗? 当然,每种语言和框架都会在主题上有所不同,但是是否有不同的通用“主题”/样式?

【问题讨论】:

  • 我不确定我是否完全正确理解了您的问题。有单元测试框架,如 NUnit、Visual Studio 中内置的一个和其他几个。这些可用于基于状态的测试。如果您还想使用基于行为的测试,您可能需要使用隔离(模拟)框架之一,例如 Rhino Mocks、MOQ、TypeMock,......此外,您可以执行集成测试以一起测试多个组件。自动化 UI 测试是另一种工具,例如用于测试 Web 服务的 soapUI(尽管我认为这是集成测试)。
  • 我试图扩展这个问题。希望它更清楚。
  • 不确定它是否符合您的问题,但我看到开发人员将 // Given// When// Then cmets 放在他们的 jUnit 测试中,通过描述先决条件和经过测试的事件来帮助编写它们,以及预期的结果。
  • @DamienPollet,是的,这就是我正在寻找的东西。通过您的关键字,我发现了一个有趣的链接:rapaul.com/2009/08/09/bddmockito-eclipse

标签: unit-testing testing tdd bdd


【解决方案1】:

我只能想到两种类型的测试。以代码为中心(xUnit 和 RSpec 给出了上面的代码)和以行为为中心(黄瓜,SpecFlow - Given/Then/When)。 现在您可以在以代码为中心的框架中进行行为风格的测试(代码 #1)。

您还有三种类型的测试:

  • Mockists - 大多数依赖项都是(严格)模拟的。
  • Stubbists - 大多数依赖项都是存根的。
  • 集成 - 大多数依赖项都是真实的。

代码#1:

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

【讨论】:

    【解决方案2】:

    我个人非常喜欢 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,它更适合我自己的个人风格,但还不是特别成熟。

    【讨论】:

      猜你喜欢
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 2010-09-19
      • 2012-10-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 2012-02-06
      相关资源
      最近更新 更多