【问题标题】:Disable global Spock Mock class for one test为一项测试禁用全局 Spock Mock 类
【发布时间】:2019-03-12 09:56:48
【问题描述】:

您好,我在 setup 方法中有一个全局 Mock,但想为同一类中的一个测试禁用它。有可能吗?

class Test extends Specification {

  void setup() {
    GroovyMock(Utils, global: true)
    Utils.getRemoteBranches(*_) >> new ArrayList<String>()
  }

  void "test1"() {
    given:
    Object context = getContext()

    when:
    ...

【问题讨论】:

  • 不可能。如果你这样做,我认为规范是不可读的。看起来您想实现 DRY 原则,但忘记了测试的可读性

标签: java testing spock


【解决方案1】:

您可以重命名您的 setup 方法,然后在您的 given 步骤中调用它。 Spock 中还有一个setup 关键字。与given含义相同。

例如,像这样:

class Test extends Specification {

  void setupMock() {
    GroovyMock(Utils, global: true)
    Utils.getRemoteBranches(*_) >> new ArrayList<String>()
  }

  void "testWithMock"() {
    given:
    setupMock()
    Object context = getContext()

    when:
    // ...

  void "testWithoutMock"() {
    given:
    Object context = getContext()

    when:
    // ...

  }

在某种程度上我同意关于测试可读性的评论,如果没有 Mock 的测试相对重要,你应该考虑创建一个单独的 Specification

【讨论】:

    猜你喜欢
    • 2014-05-15
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 2018-07-01
    • 2013-12-29
    • 2017-01-25
    相关资源
    最近更新 更多