使用测试系统与规范系统

时间:2013-07-30 08:17:56

标签: bdd minitest

我对行为驱动的开发非常陌生,我试图围绕一些基本的东西:测试系统和规范系统之间的区别。

到目前为止,我一直在使用基于Ruby的minitest / test库,其中典型的单元测试看起来像这样:

require "minitest/test"

class TestMeme < Minitest::Test
 def test_that_kitty_can_eat
   assert_equal "OHAI!", @meme.i_can_has_cheezburger?
 end
end

另一方面,minitest / spec的规范看起来像这样:

require "minitest/autorun"

describe Meme do
 describe "when asked about cheeseburgers" do
   it "must respond positively" do
     @meme.i_can_has_cheezburger?.must_equal "OHAI!"
   end
 end
end

那么测试和规格究竟有什么区别?我应该选择,还是可以同时使用?

2 个答案:

答案 0 :(得分:3)

你所展示的仅仅是测试的风格。您可以使用minitest API创建测试,也可以使用spec DSL创建测试。正如你所指出的,它们在功能上是等价的。区别在于偏好。

更大的问题是TDD与BDD。两者都主张通过编写测试来推动软件设计。首先,您编写一个失败的测试,然后您只编写使其通过所需的代码,然后重构您的代码以使其正确,同时保持测试通过。这称为TDD循环。

BDD更进一步,并指定开发人员如何与用户交互以定义开发人员工作的故事。并且它主张嘲笑的角色不同于大多数TDD从业者使用的。但与两种方法都同意的非常大的区域相比,这些差异很小。

您可以使用spec-style测试练习TDD,并且可以使用测试样式测试来练习BDD。您可以使用带有describe断言的spec样式itassert_*块,或带有must_*期望的测试样式类和方法定义进行混合和匹配。测试风格和spec风格语法之间的差异是肤浅的。

答案 1 :(得分:1)

BDD测试是业务分析师友好的单元测试,同时单元测试只是开发人员友好的。 BDD定义了一种在开发人员和BA之间进行交互的语言。

理想情况下,BA可以生成面向人类但自动可执行的文档,与敏捷集成,格式化为用户故事。

我认为你只需要阅读更多关于BDD的内容,wiki有好文章。