Как написать тестовый кейс Спока для метода, который вызывает другие методы внутри


Скажем, у меня есть метод, который заполняет некоторые данные в список, и он внутренне вызывает еще один метод(который я тестирую независимо) и который заполняет некоторые данные в список. Вот каков наилучший способ тестирования?

Как проверить внешний метод? Должен ли я также проверять данные из внутреннего метода, иначе можно проверить только данные, заполненные внешним методом?

1 3

1 ответ:

Учитывая следующий испытуемый класс:: {[0]}

Я могу написать следующий тест Спока, чтобы проверить правильность арифметики, но также и то, что getA() и getB() на самом деле вызываются getAPlusB():
def "test using all methods"() { 
    given: MyTestClass thing = Spy(MyTestClass)
    when:  def answer = thing.getAPlusB()
    then:  1 * thing.getA()
           1 * thing.getB()
           answer == 3
}

До сих пор выполняется весь код на всех 3 - х методах-getA и getB проверяются как вызываемые, но код в этих методах фактически выполняется. В вашем случае вы тестируете внутренние методы отдельно, и, возможно, вы вообще не хотите их вызывать во время этого тест. Используя Spock spy, вы можете создать экземпляр реального экземпляра тестируемого класса, но с возможностью обрезать определенные методы, которые вы хотите указать значение, возвращаемое:

def "test which stubs getA and getB"() {
   given: MyTestClass thing = Spy(MyTestClass)
   when:  def answer = thing.getAPlusB()
   then:  1 * thing.getA() >> 5
          1 * thing.getB() >> 2
          answer == 7
}