4

我喜欢 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 框架可以做同样的事情?

4

1 回答 1

1

JBehave 和 Jasmine 不太相似。Jasmine 与 rspec 更相似。JBehave 和 Cucumber(另一个 BDD 框架,我认为更流行)彼此之间的相似性比 Jasmine 或 rspec 更相似。

虽然 JBehave 没有 Jasmine 的嵌套上下文,但它当然可以在步骤之间传递状态。查看http://jbehave.org/:状态在 Steps 类的实例变量中传递。Cucumber 的工作方式类似,尽管至少 Ruby 版本(我不熟悉 Java Cucumber)更灵活,但在那种状态下,可以将任何步骤作为 Cucumber World 的实例变量从任何步骤传递到任何其他步骤。

不过要小心:在所有这些框架中,状态共享旨在允许您从多个步骤构建测试,而不是让测试相互依赖。测试可以共享代码,但是一个测试通过还是失败应该完全独立于另一个测试是通过还是失败。一旦你断言了某些东西,你就不再处于设置代码中,你正在测试,你不应该将你的状态重用于另一个测试。

于 2014-05-03T05:53:23.493 回答