Использование MockFor и требование к макету метода, используемого в конструкторе, без насмешки всего конструктора - PullRequest
0 голосов
/ 02 июля 2019

У меня есть класс, который вызывает метод в его конструкторе, и я хочу изменить только этот метод, чтобы я мог вставить свой собственный объект на место для облегчения тестирования.

Однако, когда я пытаюсь это сделать, онКажется, либо

  • опция MockFor по умолчанию игнорирует все, что происходит внутри ctor
  • MockFor с interceptConstruction = true, выводит из строя весь конструктор

Есть ли средства для насмешкитолько метод, используемый конструктором?

import groovy.mock.interceptor.MockFor


class ConstructorCallsMethod {
    def data
    ConstructorCallsMethod() {
        println "Class: constructor"
        data = setData()
    }

    def setData() {
        println "Class: setData"
        return "value"
    }

}


def mock = new MockFor(ConstructorCallsMethod)

mock.demand.setData(0..1) {
    println "mocked setData called"
    return "modified"
}

def mocked = mock.proxyInstance()
assert mocked.data == "modified"
...