【问题标题】:Does JBehave work like Jasmine?JBehave 是否像 Jasmine 一样工作?
【发布时间】:2013-02-06 09:16:47
【问题描述】:

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

【问题讨论】:

    标签: java unit-testing jasmine bdd jbehave


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2010-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多