Спок 'throw new Exception ()' не работает - PullRequest
0 голосов
/ 01 сентября 2018

Я пытаюсь использовать {throw new Exception ()} в Spock, но при запуске теста он печатает в отчете -

"Возникли следующие проблемы: Ожидаемое исключение типа 'java.lang.Exception', но исключение не выдано "

package testing

import spock.lang.Specification

class MyFirstSpec extends Specification {
    def "Test_One" (){

                given:              
                    def obj = new SpockMethodsPlaceholder()
                    obj.returnAge(0) >> {throw new Exception("invalidAge")}
                when:
                    1*obj.returnAge(0)
                then:
                    Exception ex = thrown()
                    ex.getMessage() == "invalidAge"

            }

        class SpockMethodsPlaceholder {
            def "returnAge" (int age){
                return age
            }
        }   
}

Что-то не так с моим кодом?

Ниже приведена трассировка стека тестового прогона ---

Рабочий каталог: Главная страница пользователя Gradle: /home/mafia/.gradle Распределение Gradle: Обертка Gradle из целевой сборки Версия Gradle: 4.3 Домашняя страница Java: / usr / lib / jvm / java-8-oracle Аргументы JVM: нет Программные аргументы: нет Сканирование сборки включено: false Автономный режим включен: ложь Тесты: тестирование. MyFirstSpec

: compileJava UP-TO-DATE : compileGroovy NO-SOURCE : processResources NO-SOURCE : классы до даты : compileTestJava : compileTestGroovy : processTestResources NO-SOURCE : testClasses : Тест

testing.MyFirstSpec> Test_One FAILED org.spockframework.runtime.WrongExceptionThrownError at MyFirstSpec.groovy: 16

1 тест завершен, 1 не пройден Были неудачные тесты. См. Отчет по адресу: file: ///media/mafia/A08200E98200C62E/Study/Git_Repo/GIT_JAVA/workbench/SpockProject/build/reports/tests/test/index.html

СТРОИТЬ УСПЕШНОЕ в 19-е 4 действенных задания: 3 выполненных, 1 актуальных

1 Ответ

0 голосов
/ 03 сентября 2018

Похоже, вы неправильно поняли концепцию озвучивания / насмешек

Что именно тестируется? Класс SpockMethodPlaceholder? В этом случае он не должен быть посмешищем / помечен как «тестируемый класс» - код, который вы проверяете и хотите получить уверенность в том, что он работает (код в методах этого класса, если хотите)

С другой стороны, если вы используете синтаксис >>, вы, вероятно, намереваетесь что-то заглушить.

Итак, вот лучший пример:

public class SomeClass {
   public int return getAge(int age) {
     if(age <= 0) {
         throw new IllegalArgumentException("too young");
     } else {
       return age;
     }
   }
}


class SomeClassTest extends Specification {

  def "an exception is thrown if the person is too young" () {
     given:
       def subject = new SomeClass()
     when:
        subject.getAge(-1)
     then:
        def ex = thrown(IllegalArgumentException)
        ex.message == "too young" 
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...