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

只有第一次测试成功运行使用setupSpec()的Spock套件

吴腾
2023-03-14

我一直在尝试用Geb/Spock来测试一些web应用程序,但遇到了一个我似乎无法解决的问题。

class TestThisPage extends AuthenticationSpec {
    def setupSpec() {
        loginComplete("some user ID", "some password")
        assert page instanceof ThisPage
    }

    def "Verify some link's text is correct"() {
        when: "The user is at this page"

        then: "The this specific link's text is correct"
        assert  someLink.text().equalsIgnoreCase("I am some text")
    }

    def "Verify that the correct user name is displayed"() {
        when: "The user is signed in and at this page"

        then: "The signed-in user's display name appears correctly on the page"
        assert signInText.equalsIgnoreCase("Signed in as: some user ID")
    }

    def "Verify this page's copyright"() {
        when: "The user is redirected to this page"

        then: "The copyright is correct"
        assert legalInfo.text().trim().equalsIgnoreCase("Some copyright text here")
    }
}
class ThisPage extends Page {

    static at = {
        title == "This page"
    }
    static content = {
        someLink(to: SomeOtherPage) {$("a[href='someOtherPage.jsp'")}
        signInText  {loginInfo.find("#static-label").text().trim()}
    }
}

唯一的方法就是在when或given块中添加atthispage。我想在每个测试方法中显式地将页面设置为ThisPage是有意义的,但是为什么当整个类作为测试套件运行时,只有第一个测试方法通过(即使没有ThisPage处的)?


共有1个答案

帅令雪
2023-03-14

每个后续测试方法都不知道您所处的页面。

您可以创建页面的共享实例,然后您的每个测试都可以在相同的规范中访问该实例:

class TestThisPage extends AuthenticationSpec {

    @Shared ThisPage thisPage

    def setupSpec() {
        thisPage = loginComplete("some user ID", "some password")
        assert page instanceof ThisPage
    }

    def "Verify some link's text is correct"() {
        when: "The user is at this page"

        then: "The this specific link's text is correct"
        assert  thisPage.someLink.text().equalsIgnoreCase("I am some text")
    }

    def "Verify that the correct user name is displayed"() {
        when: "The user is signed in and at this page"

        then: "The signed-in user's display name appears correctly on the page"
        assert thisPage.signInText.equalsIgnoreCase("Signed in as: some user ID")
    }

    def "Verify this page's copyright"() {
        when: "The user is redirected to this page"

        then: "The copyright is correct"
        assert thisPage.legalInfo.text().trim().equalsIgnoreCase("Some copyright text here")
    }
}
 类似资料:
  • 完成了818个集成测试,0在104001ms运行1个spock测试时失败...失败:CreditServiceSpec groovy.lang.groovyRuntimeException:未能调用构造函数:public org.codehaus.groovy.grails.test.support.grailstestautoWirer(org.springframework.context.a

  • 我试图创建一个测试套件,在套件开始时运行Spring Boot一次。我的工作原理是,每个测试用例都有@SpringBootTest,但我只希望在测试套件中有@SpringBootTest。 我确实看到了这个,但没有提到“RunWith Suite”。班

  • 在我的应用程序中有,它有一个操作,如下所示: 现在,我正在测试视图和模型,如下所示: 但是我的测试用例失败了,stacktrace如下: 正在运行2个spock测试。。。第1页,共2页 有什么问题吗。

  • 我正在运行一个TestNG套件,在同一个类中有3个测试。问题是,当我打开Allure报告(使用jetty服务器)时,我可以看到里面有两个同名和相同内容的套件。每个套房之间只有2个差异。 套件2总是在套件1之后1秒完成。 我使用3个不同的线程在3个设备上进行并行执行。如果套件具有线程顺序1、2、3,那么套件2将具有顺序1、3、2(与套件1相比)

  • 在以前的一个项目中,我使用Spock测试框架对Java代码进行单元测试。我发现这非常有效,所以我尝试将Spock测试添加到我当前的项目中,该项目使用Maven作为构建工具(前一个项目使用Gradle)。虽然我可以让Maven编译我的Spock测试(使用),但我无法让Maven运行这些测试。 我做了一个简单的例子来演示我在两个文件中的问题: null 当我执行(或)时,我希望运行单个单元测试并失败。