Использование MiniTest спецификации, я могу проверить, что код вызывает определенное исключение следующим образом:Проверка любого исключения
proc { foo.do_bar }.must_raise SomeException
Но, я не волнует, что конкретное исключение, я просто хочу, чтобы убедиться, что часть исключение бросается. Если я или другой разработчик решает изменить, какое исключение выбрано Foo # do_bar, мой тест не изменился бы, если бы ожидаемое исключение было указано в целом достаточно.
То есть, я хотел бы написать тест таким образом (исключение является предком класса SomeException):
proc { foo.do_bar }.must_raise Exception
К этому приводит к сбою при запуске теста:
[Exception] exception expected, not
Class: <SomeException>
Могу ли я написать свою спецификацию Minitest более универсально в отношении исключений?
(Фактическая причина, по которой я хочу проверить любое исключение, а не конкретное исключение, заключается в том, что я использую сторонний Gem, и именно этот код вызывает исключение. Фактически, мой метод A получает вызванный сторонним методом B. A вызывает MyException, однако B улавливает это исключение и повторно вызывает другое исключение. Это исключение имеет то же сообщение, что и мое исключение [и это сообщение - это то, что я должен проверить в тесте], но другой класс.)
Так что вам все равно, было ли это 'SystemStackError' или' SystemExit' или 'ThreadError'? Тогда зачем тестировать? Вы должны проверить специфику. В противном случае, как вы сообщаете другим разработчикам, каковы были ваши намерения? – vgoff
@vgoff: Для краткости я оставил это, но я работаю с Ruby Racer, который связывает JavaScript с Ruby и наоборот. Если мой код Ruby вызывает исключение, это исключение заканчивается как RR-класс, V8 :: Error, а не исключение, которое вызвал мой код.Это связано с внутренними данными стороннего Gem, которые я использую, и это детали, которые меня не интересуют с точки зрения тестирования или даже с точки зрения реализации. С точки зрения тестирования важно то, что мой код Ruby обнаруживает недопустимое условие, и возникает исключение. – Jimothy
@vgoff Пока он меняет «почему», он не меняет «как», насколько я могу судить. Вы поднимаете хороший момент со своим первым комментарием, в общем, нужно быть конкретным во время тестирования. Тем не менее, я не хочу задавать свой вопрос чрезмерно конкретным, так как могут быть и другие, которые по какой-либо причине хотят протестировать любое исключение с помощью MiniTest. Однако я добавлю пояснительный текст к своему вопросу, почему я хотел бы это сделать. – Jimothy