我喜欢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中所做的状态如何传递给依赖于它们的状态。
JBe可以像Jasmine一样做这项工作吗?如果没有,Java中是否有另一个可以做同样事情的BDD框架?
答案 0 :(得分:1)
JBehave和Jasmine并不是那么相似。 Jasmine与rspec更相似。 JBehave和Cucumber(另一个BDD框架,我认为更受欢迎)与Jasmine或rspec更相似。
虽然JBehave没有Jasmine的嵌套上下文,但它肯定可以在步骤之间传递状态。查看http://jbehave.org/:状态在Steps类的实例变量中传递。 Cucumber的工作方式类似,尽管Ruby版本至少(我不熟悉Java Cucumber)更灵活,因为该状态可以作为黄瓜世界的实例变量从任何步骤传递到任何其他步骤。
但请注意:在所有这些框架中,状态共享旨在允许您从多个步骤构建测试,而不是允许测试相互依赖。测试可以共享代码,但是一个测试通过或失败应该完全独立于另一个测试是否通过或失败。一旦你断言了什么,你就不再需要设置代码了,你正在测试,你不应该重复使用你的状态进行另一次测试。