我喜欢 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 框架可以做同样的事情?
最佳答案
JBehave 和 Jasmine 并没有那么相似。 Jasmine 与 rspec 更相似。与 Jasmine 或 rspec 相比,JBehave 和 Cucumber(另一种 BDD 框架,甚至更流行,我认为)彼此更相似。
虽然 JBehave 没有 Jasmine 的嵌套上下文,但它当然可以在步骤之间传递状态。看http://jbehave.org/ :状态在 Steps 类的实例变量中传递。 Cucumber 的工作原理类似,尽管至少 Ruby 版本(我不熟悉 Java Cucumber)更灵活,在该状态下可以作为 Cucumber World 的实例变量从任何步骤传递到任何其他步骤。
不过要小心:在所有这些框架中,状态共享旨在允许您通过多个步骤构建测试,而不是让测试相互依赖。测试可以共享代码,但是一个测试是通过还是失败应该完全独立于另一个测试是通过还是失败。一旦断言某些内容,您就不再处于设置代码中,您正在测试,并且您不应该将您的状态重新用于另一个测试。
关于java - JBehave 是否像 Jasmine 一样工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14725343/