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

是否有一种方法可以防止Geb返回无效方法?

澹台玉石
2023-03-14

在Spock规范中,expect:或then:block中的任何行都被计算并断言为boolean,除非它具有返回类型为void的签名。

class NavigationSpec extends GebSpec {

    def 'Collections page has a right header'() {

        when:
            to CollectionsPage

        then:
            hasHeaderText('Collections')
    }
}

HasHeaderText()方法CollectionSpage类中定义如下:

class CollectionsPage extends Page {

    static url = 'movies/collections'

    void hasHeaderText(String expectedText) {
        assert true
    }
}

我故意在那里断言true,这样它就不会失败。即使失败并出现错误:

Condition not satisfied:

hasHeaderText('Collections')
|
null

如何以及为什么void方法调用结果被计算为null

boolean hasHeaderText(String expectedText) {
    assert header.text() == expectedText
    return true
}
boolean hasHeaderText(String expectedText) {
    header.text() == expectedText`
}

共有1个答案

澹台俊晖
2023-03-14

每个方法都返回一个值,这是Groovy语言的一部分。这允许在表达式中或作为lambdas使用任何方法。

所有声明为void的方法都返回null

如果没有显式的任何return语句,则返回方法中最后一个表达式的结果。

// returns null
String callMe() { }

static void main(args) {
    def x = callMe()
    assert x == null
    println "OK!"
}
boolean hasHeaderText(String expectedText) {
    header.text() == expectedText
}
then: 'The header has the expected text #expectedText'
hasHeaderText expectedText

编辑

我注意到Groovy/Spock实际上不会断言普通void方法的结果,即使在then块中也是如此...这里可能发生的情况是,您没有一个普通的void方法,您似乎在调用collectionspage的动态方法(我想这是GEB的魔力),这意味着,Spock AST转换器可能没有机会检查您调用的方法的签名,所以它正确地假设它必须断言结果...至少看起来是这样。

 类似资料:
  • 问题内容: 我正在在线关注CS106A的讲座。我正在阅读第12讲中的代码,但这给了我Eclipse错误。 这是我的代码。似乎错误是由于我的方法中的单词void 。我尝试删除main方法,但是没有它,Java当然无法运行。 我是一名新手,没有人解释这东西的真正含义,但有人告诉我,请不要理会它并使用它。如果有人也可以向我解释,我将不胜感激。 这个错误也出现在“ toLower”方法上。不知道这意味着什

  • 问题:我只需要将其中一个节点组列为有资格进行负载平衡的白名单。另一个ASG(以及任何未来的ASG,默认情况下)是批处理工作者,它不承载任何internet服务,也不会在它们上调度任何web服务荚。 这是否可能在EKS中实现,以及如何实现?

  • 问题内容: 我正在使用模拟器玩掷骰子,并且试图从同一方法返回两个值(或者我想这样做)。 当我写我的return语句时,我只是尝试放入“&”,它可以编译并正常运行;但是我无法访问第二个返回值。 当我将值返回为: 它适当地设置了赢或输的变量,但是如果我尝试执行以下语句中的简单操作: 它被分配与gamestatus相同的值… 0或1(赢或输)。以任何方式可以访问第二个返回值?还是有完全不同的方法来解决?

  • 我有一个类,它有一个包含来自类的对象。我在中有一个函数,叫做。每个都有一个名为的函数,该函数返回一个值。我能以某种方式使用流使函数的主体看起来像这样吗?

  • 问题内容: 文档说调用sys.exit()会引发SystemExit异常,该异常可以在外部级别捕获。在这种情况下,我想确定无疑地从测试用例中退出,但是unittest模块会捕获SystemExit并阻止退出。这通常很好,但是我要处理的特定情况是我们的测试框架检测到已配置为指向非测试数据库的情况。在这种情况下,我要退出并阻止运行任何进一步的测试。当然,由于unittest捕获了SystemExit并