Иногда мне хотелось бы, чтобы модульный тест подтвердил, что какой-то код вызывает исключение, не зная точно класс исключения. Например, чтобы подтвердить, что это вызывает исключение, которое является kind_of?(StandardError)
, я хотел бы написать это:Как получить assert_raise для обработки подклассов исключений
assert_raise StandardError do
my_method
end
Это утверждение проходит, если исключение является экземпляром StandardError
, но терпит неудачу, если исключение является экземпляром подкласса от StandardError
. Мое лучшее решение заключается в следующем:
begin
my_method
rescue StandardError => error
return
end
assert false, "no error from my_method"
rescue
делает обрабатывать исключения подклассов, как я хочу, так это работает. Но это немного неудобно. Любые лучшие идеи?
Это модуль Test :: Unit :: Assertions в Ruby 1.8.7.
Но тогда тест будет проходить, если (скажем) будет поднят SignalException, верно? Это исключение, но это не StandardError, поэтому я хочу, чтобы это случилось. –
Я не понимаю. Вы хотите, чтобы assert_raise проверял, является ли ошибка экземпляром 'StandardError'? –
Да, StandardError или его подкласс. Я сделаю это, чтобы сделать это более ясным. –