Отключить глобальный класс Spock Mock на один тест

Здравствуйте, у меня есть глобальный макет в методе настройки, но я хотел бы отключить его для одного теста в том же классе. Является ли это возможным?

class Test extends Specification {

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

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

    when:
    ...

person Ben    schedule 12.03.2019    source источник
comment
Это невозможно. Я не думаю, что спецификацию можно было бы прочитать, если бы вы это сделали. Похоже, вы хотите добиться принципа DRY, но забыли о читабельности тестов   -  person Dmitry Khamitov    schedule 12.03.2019


Ответы (1)


Вы можете просто переименовать свой setup метод и вызвать его на своем given шаге. В Споке также есть 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.

person Thomas Hirsch    schedule 13.03.2019