2

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

到目前为止,我一直在使用基于 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

那么测试和规格之间到底有什么区别呢?我应该选择,还是可以同时使用?

4

2 回答 2

3

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

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

BDD 更进一步,它指定了开发人员如何与用户交互来定义开发人员工作的故事。它提倡模拟与大多数 TDD 从业者使用的角色不同。但与两种方法都同意的非常大的领域相比,这些差异很小。

您可以使用规范式测试来练习 TDD,也可以使用测试式测试来练习 BDD。您可以混合和匹配规范样式describeit带有assert_*断言的块,或测试样式类和具有must_*期望的方法定义。测试风格和规范风格语法之间的区别是表面的。

于 2013-07-30T14:50:37.273 回答
1

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

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

我认为您只需要阅读有关BDD的更多信息,wiki 有很好的文章。

于 2013-07-30T08:46:01.497 回答