Нет, это не лучшая практика. Лучшая аналогия с assert () в Ruby - это просто повышение
raise "This is wrong" unless expr
, и вы можете реализовать свои собственные исключения, если хотите обеспечить более конкретную обработку исключений
Какова Ваша причина добавления утверждать метода к модулю Ядра? Почему не только используют другой модуль, названный Assertions
или что-то?
Как это:
module Assertions
def assert(param)
# do something with param
end
# define more assertions here
end
, Если Вам действительно нужны Ваши утверждения, чтобы быть доступны везде , делают что-то вроде этого:
class Object
include Assertions
end
Правовая оговорка: Я не протестировал код, но в принципе я сделаю это как это.
Мое понимание - то, что Вы пишете свой собственный комплект тестирования как способ стать более знакомыми с Ruby. Таким образом, в то время как Тест:: Единица могла бы быть полезной как руководство, это, вероятно, не, что Вы ищете (потому что это уже сделало задание).
Однако Python утверждает, (мне, по крайней мере), более аналогичный C утверждают (3) . Это не специально предназначено для модульных тестов, скорее для ловли случаев, где "этого никогда не должно происходить".
то, Как встроенные модульные тесты Ruby имеют тенденцию просматривать проблему, тогда, то, что каждый отдельный класс тестового сценария является подклассом TestCase, и это включает "утверждать" оператор, который проверяет законность того, что было передано ему и записывает его для создания отчетов.
Это не особенно идиоматично, но я думаю, что это хорошая идея. Особенно, если сделать это так:
def assert(msg=nil)
if DEBUG
raise msg || "Assertion failed!" unless yield
end
end
Таким образом, вы не решите работать с DEBUG (или каким-либо другим удобным переключателем, я использовал ранее Kernel.do_assert) без каких-либо последствий.