Тест на взаимодействие Спока: слишком мало вызовов метода

У меня есть довольно простой метод. Он вызывает другой метод, который мягко удаляет ключ API, а затем вызывает другой метод для создания нового и возвращает его.

Ниже также приведен тест, который просто проверяет, правильно ли были вызваны два метода. Но по-прежнему получаю 0 ошибок вызова для обоих методов. Что вызывает эту проблему?

AuthApiKeyPair updateApiKeyPair(AuthApiKeyPair apiKeyPair, Boolean createNewKey) {

    AuthApiKeyPair newKeyPair

    if (createNewKey) {
        deleteApiKeyPair(apiKeyPair)

        //The key will be created with the same info as the previous key.
        newKeyPair = createApiKeyPair(apiKeyPair.label, apiKeyPair.accountMode, apiKeyPair.source)
    }

    newKeyPair
}

ТЕСТОВОЕ ЗАДАНИЕ:

def "should soft delete key pair and create new one"() {
    setup:
    AuthApiKeyPair apiKeyPair = AuthApiKeyPair.build(acquirerId: 123, source: PaymentSource.BOARDING_API, label: 'Boarding API key')

    when:
    service.updateApiKeyPair(apiKeyPair, true)

    then:
    1 * service.deleteApiKeyPair(apiKeyPair)
    1 * service.createApiKeyPair(apiKeyPair.label, apiKeyPair.accountMode, apiKeyPair.source)
}

person kennanwho    schedule 23.06.2018    source источник
comment
Вы хотите знать, почему возникает ошибка, но вы еще не опубликовали ни сообщение об ошибке, ни определение критического элемента service. Скрытие информации превращает этот вопрос в викторину, и те, от кого вы ожидаете помощи, могут только догадываться. Поэтому, пожалуйста, обновите вопрос, предоставив хотя бы определение service.   -  person kriegaex    schedule 24.06.2018


Ответы (1)


person    schedule
comment
Это очень хороший ответ, я просто не хотел писать аналогичный для еще одного вопроса, который даже не предоставляет полный тест или класс приложения. Ответ на самом деле слишком хороший и обширный для тех небольших усилий, которые ОП вложил в свой вопрос. В любом случае, большой комплимент Шимону. Мне действительно интересно, почему люди так стремятся тестировать внутреннюю реализацию каждого тривиального класса, проверяя взаимодействия, вместо того, чтобы пытаться сначала провести хорошее функциональное тестирование. Взаимодействия следует тестировать только там, где это необходимо для проверки правильности реализации, например, шаблон проектирования, такой как наблюдатель. - person kriegaex; 24.06.2018
comment
Спасибо @kriegaex за добрые слова! Я думаю, что выполнение тестов на основе взаимодействия - одна из вех в обучении написанию хороших тестов. Я был там, делал то же самое и узнал, что есть способы лучше проверить код. Если бы OP выполнял цикл TDD, он бы даже не думал о тестировании взаимодействий и сосредоточился бы на результатах тестирования и крайних случаях, независимо от внутренней реализации. Допускается совершение этих ошибок, если они являются побочным эффектом процесса обучения. И в этом суть SO - учить и учиться друг у друга. Лучший! - person Szymon Stepniak; 24.06.2018