Тест исключения исключений Spock

Я тестирую Java-код со Spock. Я тестирую этот код:

 try {
    Set<String> availableActions = getSthAction()
    List<String> goodActions = getGoodAction()
    if (!CollectionUtils.containsAny(availableActions ,goodActions )){
       throw new CustomException();
    }
} catch (AnotherCustomExceptio e) {
     throw new CustomException(e.getMessage());
}

Я написал тест:

def "some test"() {
    given:
    bean.methodName(_) >> {throw new AnotherCustomExceptio ("Sth wrong")}
    def order = new Order();
    when:
    validator.validate(order )
    then:
    final CustomException exception = thrown()
}

И он терпит неудачу, потому что AnotherCustomExceptio выбрасывается. Но в блоке try{}catch я поймаю это исключение и выброшу CustomException, поэтому я ожидал, что мой метод будет бросать CustomException, а не AnotherCustomExceptio. Как проверить его?

Ответ 1

Я считаю, что ваш блок then должен быть исправлен. Попробуйте следующий синтаксис:

then:
thrown CustomException

Ответ 2

Если вы хотите оценить, например, сообщение об исключении, вы можете сделать что-то вроде:

then:
def e = thrown(CustomException)
e.message == "Some Message"

Ответ 3

def "Exception Testing 1"(){
    given :
    def fooObject = mock(Foo);
    when:
    doThrow(RuntimeException).when(fooObject).foo()
    then:
    thrown RuntimeException
}

def "Exception Testing 2"(){
    given :
    def fooObject = Mock(Foo);
    when:
    when(fooObject.foo()).thenThrow(RuntimeException)
    then:
    thrown RuntimeException
}