8步快速上手JBehave:从场景定义到步骤实现

本文详细介绍了如何使用JBehave进行行为驱动开发,包含创建场景文件、步骤映射类、测试执行及结果验证的完整流程,帮助开发者快速掌握BDD测试框架的核心用法。

8步快速上手JBehave

本文将介绍JBehave及其快速入门方法。若想了解BDD(行为驱动开发),请参考相关链接。

什么是行为驱动开发?

今天首次使用JBehave。它具有一些令人信服的特点,例如将需求拆分为场景,这些场景与Steps中编写的测试完美映射。因此,利益相关者可以将其作为初始需求的良好指南。在开发过程中出现分歧是很常见的,但该工具确实有助于为利益相关者带来便利,他们无需编写代码,而是通过场景的形式与开发者进行技术沟通。

入门步骤

  1. 在Eclipse中创建Java项目

  2. 从官网下载JBehave最新版本,并将jar文件添加到项目构建类路径中

  3. 创建场景文件并命名为user_wants_to_shop.scenario

  4. 在文件中添加以下文本

    1
    2
    3
    
    Given user Shaaf is logged in
    Check if user shaaf is Allowed to shop
    Then show shaaf his shopping cart
    

    以上行简单地陈述了我们要创建的场景规则。

  5. 创建对应的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
    25
    
    import 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());
        }
    }
    
  6. 创建Steps类: 现在我们需要一个地方来存放场景中Steps的逻辑。因此创建新的Steps类ShoppingSteps.java

    1
    2
    3
    4
    5
    6
    
    import 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 {}
    
  7. 运行场景: 通过Junit Test运行场景,输出应如下:

    1
    2
    3
    4
    
    Scenario:
    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)
    

    这意味着尚未实现任何场景需求。但测试结果应为绿色,显示设置没有问题。

  8. 添加测试实现: 为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);
    }
    

现在再次运行场景,所有测试应为绿色(由于未实现实际方法,它们将显示为红色)。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计