Спок MissingMethodException

У меня есть что-то похожее на аналогичную спецификацию:

def "my spec"(Record record) {
    given: 
        Something something = getSomething()
    and: 
        otherThing = getOtherThing()

    doFlow(something, record)
    if (record.someType = Types.SOME_SPECIFIC_TYPE) {
        doFlow(something, record)
    } 
}

def doFlow(Something something, Record record) {
    when:
         //code
    then:
         //asserts

    when:
         //code
    and: 
         //mode code
    then:
         //code
}

Однако во время выполнения я получаю: groovy.lang.MissingMethodException: No signature of method doFlow() is applicable for arguments Something, Record values: [given values].


person Random42    schedule 12.11.2013    source источник
comment
Предположительно за этим следует Метод поиска пропавших без вести Спока. :-)   -  person T.J. Crowder    schedule 12.11.2013


Ответы (1)


И «мой поток», и «doFlow» являются методами функций, поскольку они имеют такие блоки, как given, when и then. Спок отвечает за вызов методов объектов, и один метод объектов не может вызывать другой. Если doFlow должен быть вспомогательным методом, он должен использовать явные операторы assert и не должен иметь никаких блоков.

PS: методы функций не могут объявлять параметры метода, если они не управляются данными (т. е. не имеют блока where).

PPS: метод объекта не может иметь только блок given/and. (Для этого вы получите ошибку компиляции.)

person Peter Niederwieser    schedule 12.11.2013
comment
И нет ли какой-нибудь аннотации, в которой Споку говорится, что это всего лишь простой метод, а не метод признаков? - person Random42; 12.11.2013
comment
Простой метод — это метод, в котором нет блоков и связанных с ними функций. Причина, по которой функция, о которой вы просите, не поддерживается, заключается в том, что неясно, что означает, скажем, вызов метода, имеющего блок expect, из блока when другого метода. Внезапно блок when перестал выполнять свою задачу (только) выполнять тестируемый код. - person Peter Niederwieser; 12.11.2013