8步快速上手JBehave
本文将介绍JBehave及其快速入门方法。若想了解BDD(行为驱动开发),请参考相关链接。
什么是行为驱动开发?
今天首次使用JBehave。它具有一些令人信服的特点,例如将需求拆分为场景,这些场景与Steps中编写的测试完美映射。因此,利益相关者可以将其作为初始需求的良好指南。在开发过程中出现分歧是很常见的,但该工具确实有助于为利益相关者带来便利,他们无需编写代码,而是通过场景的形式与开发者进行技术沟通。
入门步骤
-
在Eclipse中创建Java项目
-
从官网下载JBehave最新版本,并将jar文件添加到项目构建类路径中
-
创建场景文件并命名为
user_wants_to_shop.scenario -
在文件中添加以下文本:
1 2 3Given user Shaaf is logged in Check if user shaaf is Allowed to shop Then show shaaf his shopping cart以上行简单地陈述了我们要创建的场景规则。
-
创建对应的Java映射文件: 创建与
.scenario文件同名的新类UserWantsToShop.java,并添加以下代码:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25import org.jbehave.scenario.PropertyBasedConfiguration; import org.jbehave.scenario.Scenario; import org.jbehave.scenario.parser.ClasspathScenarioDefiner; import org.jbehave.scenario.parser.PatternScenarioParser; import org.jbehave.scenario.parser.ScenarioDefiner; import org.jbehave.scenario.parser.UnderscoredCamelCaseResolver; public class UserWantsToShop extends Scenario { // 使用默认配置的常规构造函数 public UserWantsToShop(){ super(new ShoppingSteps()); } // 将.scenario文件映射到场景。这不是默认行为。 public UserWantsToShop(final ClassLoader classLoader) { super(new PropertyBasedConfiguration() { public ScenarioDefiner forDefiningScenarios() { return new ClasspathScenarioDefiner( new UnderscoredCamelCaseResolver(".scenario"), new PatternScenarioParser(this), classLoader); } }, new ShoppingSteps()); } } -
创建Steps类: 现在我们需要一个地方来存放场景中Steps的逻辑。因此创建新的Steps类
ShoppingSteps.java:1 2 3 4 5 6import org.jbehave.scenario.annotations.Given; import org.jbehave.scenario.annotations.Then; import org.jbehave.scenario.annotations.When; import org.jbehave.scenario.steps.Steps; public class ShoppingSteps extends Steps {} -
运行场景: 通过Junit Test运行场景,输出应如下:
1 2 3 4Scenario: Given I am not logged in (PENDING) When I log in as Shaaf with a password JBehaver (PENDING) Then I should see my "Shopping Cart" (PENDING)这意味着尚未实现任何场景需求。但测试结果应为绿色,显示设置没有问题。
-
添加测试实现: 为
ShoppingSteps添加具体实现(已添加方法注释):1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17// 给定用户(参数)已登录 @Given("user $username is logged in") public void logIn(String userName){ checkInSession(userName); } // 检查用户是否被允许在服务器上操作 @When("if user $username is $permission to shop") public void isUserAllowed(String userName, String permission){ getUser(userName).isUserAllowed().equals(permission); } // 最后让他使用购物车 @Then("show $username his Shopping cart") public void getMyCart(String userName, String cart){ getUserCart(userName); }
现在再次运行场景,所有测试应为绿色(由于未实现实际方法,它们将显示为红色)。