我喜欢 JavaScript BDD 工具 Jasmine,因为它可以非常灵活地定义故事。Jasmine 中的故事可以这样构造,即先决条件故事在依赖于先前故事的故事之前运行。这使得测试代码具有高度的可重用性和可读性。
代码重用示例:
describe("parent story", function() {
var a = 1;
beforeEach(function(){
a++;
});
it("should equal to 2", function() {
expect(a).toBe(2);
});
describe("child story"), function(){
beforeEach(function(){
a++;
});
it("should equal to 3", function(){
expect(a).toBe(3);
});
});
});
我对在 Java 世界中使用这个概念进行了一些研究,发现 Java 中最流行的 BDD 是 JBehave。然而,它似乎不像 Jasmine 那样灵活地为子故事重用之前故事中的测试代码。我看不出它如何像 Jasmine 示例那样将重用的变量从父故事传递到子故事中。
JBehave 有 GivenStories 概念要先于其他概念运行,但是我找不到如何将 GivenStories 中的状态传递给依赖它们的状态。
JBehave 能像 Jasmine 一样出色地完成这项工作吗?如果没有,Java 中是否有另一个 BDD 框架可以做同样的事情?