当前位置: 首页 > 知识库问答 >
问题:

为什么@BeforeClass没有开火?

裴欣然
2023-03-14

这是一个取自现有代码库的cucumber场景大纲,但我被要求使用TestNG尝试它。一些东西(场景(),场景(),TestNGCucumberRunner,数据提供商)已经从stackoverflow上的另一个帖子中删除,因为我不知道如何使用TestNG使场景大纲发挥良好。

public class StepsSettings {
    private WebDriver driver;
    private SettingsPage settingsPage;
    private SearchBlock searchBlock;
    private TestNGCucumberRunner testNGCucumberRunner;

    @Test
    @Given("maximum results per page is set to {int}")
    public void maximumResultsPerPageIsSetTo(int results) {
        settingsPage = new SettingsPage(driver);
        searchBlock = new SearchBlock(driver);
        settingsPage.navigateTo();
        settingsPage.setNumberOfResults(results);
    }

    @Test
    @When("the user searches for {string} in collection {string}")
    public void theUserSearchesForInCollection(String key, String collection) {
        searchBlock.performSearch(key, collection);
    }

    @Test
    @Then("the number of publications displayed is no more than {int}")
    public theNumberOfPublicationsDisplayedIsNoMoreThan(int count) {
        By articlesBy = By.cssSelector("article");

        Assert.assertTrue(settingsPage.getObjects(articlesBy).size() <= count);
    }

    @Test(groups = "cucumber scenarios", description = "Runs Cucumber Scenarios", dataProvider = "scenarios")
    public void scenario(PickleWrapper pickleEvent, FeatureWrapper cucumberFeature) throws Throwable {
        testNGCucumberRunner.runScenario(pickleEvent.getPickle());
    }

    @DataProvider
    public Object[][] scenarios() {
        testNGCucumberRunner = new TestNGCucumberRunner(this.getClass());
        return testNGCucumberRunner.provideScenarios();
    }

    @BeforeClass(alwaysRun = true)
    public void setup() {
        System.setProperty(
            "webdriver.chrome.driver",
            System.getProperty("user.dir") + "\\webdriver\\chromedriver.exe"
        );
        driver = new ChromeDriver();
    }

    @AfterClass(alwaysRun = true)
    public void teardown() {
        driver.quit();
        testNGCucumberRunner.finish();
    }
}

在执行时,唯一的错误是NullPointerException,因为WebDriver获取其值时@BeforeClass未触发。

处理场景大纲的部分我不完全理解,但至少我不再得到带错误的不能注入@test注释方法。

共有2个答案

全心思
2023-03-14

请使用@BeforeTest而不是@BeforeClass。如果问题解决了,请尝试理解这里的测试注释流程。或者在这里发表评论,寻求进一步帮助。

赫连捷
2023-03-14

用Before/AfterClass注释的方法必须是静态的。

 类似资料:
  • 问题内容: 我有以下代码: 以及其他各种方法,例如@ Before,@ After,@ Test或@AfterClass方法。 测试在启动时不会像看起来的那样失败。有谁可以帮助我吗? 我有JUnit 4.5 该方法无法立即调用注释为@before的setUp()。类def是: 问题答案: 不要扩展TestCase并同时使用注释! 如果需要使用批注创建测试套件,请使用RunWith批注,例如: (按

  • 我已经创建了一个 除了一些其他的: 在我的aplication.properties 而这是的入口点: 仍然,我没有看到下的endpointhttps://localhost:8443/v3/api-docs.只有那些来自的endpoint: 我使用的是Spring Boot。 这是我使用的整个pom.xml: 我已经尝试按照这里的建议添加依赖项 但它仍然不起作用。 知道这是什么原因吗?

  • 问题内容: 我正在尝试做这样的事情: 不幸的是,即使在Java 9中也不存在。 为什么它被遗漏了? 建议的解决方法是什么? 问题答案: 为什么它被遗漏了? 该API提供了可重用的构建块。这里的相关积木是,,。通过这些,您可以实现所需的功能:将流内映射到对象,然后获得平面图。提供构建基块的排列是不切实际的,并且很难扩展。 建议的解决方法是什么? 如前所述,使用可用的构建基块(+ ):

  • 许多编译器都提供128位整数类型,但我使用过的编译器都没有提供typedefs。为什么? 据我回忆,标准 用于此目的的储量 鼓励提供此类类型的实现提供typedef 要求此类实现提供至少128位的intmax_t (而且,我不相信我使用了实际上符合最后一点的实现)

  • Maven依赖项: spring-core:3.0.6。发布 spring-context:3.0.6。发布 spring-test:3.0.6。发布 spring-data-commons-core:1.2.0.m1 spring-data-mongoDB:1.0.0.m4 mongo-java-driver:2.7.3 junit:4.9 cglib:2.2 (1)重写beforeTestCl

  • 我也下载了JDK,我在每个论坛上看到这个问题,都说要添加变量JDK\u HOME或JAVA\u HOME,我两个都试过了,但仍然没有打开。 我重新安装了Android Studio并重新启动了我的计算机,但它没有打开。我得到了这样的加载图标,但它只是卡在上面。 我正在运行Windows 8.1,并且安装了最新版本的JDK。非常高兴能开始编写代码,如有任何帮助或建议,将不胜感激。