You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让JBehave针对特定Story文件覆盖或跳过@BeforeStories?

Absolutely, JBehave gives you a couple of practical ways to handle this exact scenario—either skip the shared @BeforeStories entirely for your new stories, or selectively bypass just the parts you don’t need. Let’s walk through both approaches with concrete code examples that won’t break your existing tests:

方案1:完全跳过全局@BeforeStories,为新Story定制初始化

This is perfect if your new stories need none of the global setup steps and want a completely fresh initialization routine.

Step 1: Tag your new stories

Add a meta tag at the top of each new .story file to mark them as needing to skip the global setup:

Meta: @skipGlobalBeforeStories

Scenario: New test scenario that doesn't need global setup
Given I am on the public landing page
When I click the signup button
Then I should see the registration form

Step 2: Modify the global @BeforeStories to check for the tag

Update your shared CommonSteps class to skip the setup logic if any of the running stories have the @skipGlobalBeforeStories tag:

import org.jbehave.core.model.Story;
import org.jbehave.core.embedder.Embedder;
import org.jbehave.core.embedder.EmbedderFactory;
import java.util.List;

public class CommonSteps {

    @BeforeStories
    public void globalBeforeStories() {
        // Get the list of stories being executed
        Embedder embedder = EmbedderFactory.getEmbedder();
        List<Story> runningStories = embedder.storyManager().stories();

        // Check if any story needs to skip the global setup
        boolean shouldSkipGlobal = runningStories.stream()
            .anyMatch(story -> story.getMeta().hasProperty("skipGlobalBeforeStories"));

        if (!shouldSkipGlobal) {
            // Run your original global setup steps (only for existing stories)
            initializeSeleniumDriver();
            loginToAdminPanel();
            preloadTestData();
            // ... other shared steps
        }
    }
}

Step 3: Add custom @BeforeStory for new stories

Create a separate steps class for your new stories to handle their specific initialization:

public class NewStorySpecificSteps {

    @BeforeStory
    public void customBeforeStory() {
        // Only run the setup steps your new stories need
        initializeSeleniumDriver();
        // No login, no preloaded data—just what's required
    }
}
方案2:选择性跳过@BeforeStories中的部分步骤

If your new stories need some of the global setup but not all (e.g., skip login but keep driver initialization), this approach is more flexible.

Step 1: Split global setup into modular methods

Break down your @BeforeStories logic into smaller, conditional methods in the shared CommonSteps class:

public class CommonSteps {

    @BeforeStories
    public void globalBeforeStories() {
        // Step that all stories need (no conditional check)
        loadTestConfiguration();
        initializeSeleniumDriver();

        // Check if we should skip login
        if (!shouldSkipStep("skipLogin")) {
            loginToAdminPanel();
        }

        // Check if we should skip test data setup
        if (!shouldSkipStep("skipDataSetup")) {
            preloadTestData();
        }
    }

    private boolean shouldSkipStep(String tagName) {
        Embedder embedder = EmbedderFactory.getEmbedder();
        return embedder.storyManager().stories().stream()
            .anyMatch(story -> story.getMeta().hasProperty(tagName));
    }
}

Step 2: Tag your new stories to skip specific steps

Add the relevant meta tags to your new .story files to bypass only the steps you don’t need:

Meta: @skipLogin @skipDataSetup

Scenario: New scenario that needs driver but no login/data
Given I am on the public homepage
When I search for "test product"
Then I should see search results
Key Notes
  • @BeforeStories runs once before all stories, while @BeforeStory runs once per story. Choose the right one based on whether your new stories need per-story initialization or a one-time setup.
  • Make sure you’re using JBehave 4.x or later—these meta tag and context APIs are fully supported in newer versions.
  • Both approaches let you avoid modifying existing stories or breaking current tests, which aligns perfectly with your "no immediate overhaul" goal.

内容的提问来源于stack exchange,提问作者toolmania1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:30:49