我对行为驱动的开发非常陌生,我试图围绕一些基本的东西:测试系统和规范系统之间的区别。
到目前为止,我一直在使用基于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
那么测试和规格究竟有什么区别?我应该选择,还是可以同时使用?
答案 0 :(得分:3)
你所展示的仅仅是测试的风格。您可以使用minitest API创建测试,也可以使用spec DSL创建测试。正如你所指出的,它们在功能上是等价的。区别在于偏好。
更大的问题是TDD与BDD。两者都主张通过编写测试来推动软件设计。首先,您编写一个失败的测试,然后您只编写使其通过所需的代码,然后重构您的代码以使其正确,同时保持测试通过。这称为TDD循环。
BDD更进一步,并指定开发人员如何与用户交互以定义开发人员工作的故事。并且它主张嘲笑的角色不同于大多数TDD从业者使用的。但与两种方法都同意的非常大的区域相比,这些差异很小。
您可以使用spec-style测试练习TDD,并且可以使用测试样式测试来练习BDD。您可以使用带有describe
断言的spec样式it
和assert_*
块,或带有must_*
期望的测试样式类和方法定义进行混合和匹配。测试风格和spec风格语法之间的差异是肤浅的。
答案 1 :(得分:1)
BDD测试是业务分析师友好的单元测试,同时单元测试只是开发人员友好的。 BDD定义了一种在开发人员和BA之间进行交互的语言。
理想情况下,BA可以生成面向人类但自动可执行的文档,与敏捷集成,格式化为用户故事。
我认为你只需要阅读更多关于BDD的内容,wiki有好文章。