Это - идиоматический Ruby для добавления утверждения () метод к классу Ядра Ruby?

72
задан Wladimir Palant 11 June 2012 в 14:01
поделиться

4 ответа

Нет, это не лучшая практика. Лучшая аналогия с assert () в Ruby - это просто повышение

 raise "This is wrong" unless expr

, и вы можете реализовать свои собственные исключения, если хотите обеспечить более конкретную обработку исключений

96
ответ дан 24 November 2019 в 12:38
поделиться

Какова Ваша причина добавления утверждать метода к модулю Ядра? Почему не только используют другой модуль, названный Assertions или что-то?

Как это:

module Assertions
  def assert(param)
    # do something with param
  end

  # define more assertions here
end

, Если Вам действительно нужны Ваши утверждения, чтобы быть доступны везде , делают что-то вроде этого:

class Object
  include Assertions
end

Правовая оговорка: Я не протестировал код, но в принципе я сделаю это как это.

14
ответ дан Christoph Schiessl 24 November 2019 в 12:38
поделиться

Мое понимание - то, что Вы пишете свой собственный комплект тестирования как способ стать более знакомыми с Ruby. Таким образом, в то время как Тест:: Единица могла бы быть полезной как руководство, это, вероятно, не, что Вы ищете (потому что это уже сделало задание).

Однако Python утверждает, (мне, по крайней мере), более аналогичный C утверждают (3) . Это не специально предназначено для модульных тестов, скорее для ловли случаев, где "этого никогда не должно происходить".

то, Как встроенные модульные тесты Ruby имеют тенденцию просматривать проблему, тогда, то, что каждый отдельный класс тестового сценария является подклассом TestCase, и это включает "утверждать" оператор, который проверяет законность того, что было передано ему и записывает его для создания отчетов.

4
ответ дан Atiaxi 24 November 2019 в 12:38
поделиться

Это не особенно идиоматично, но я думаю, что это хорошая идея. Особенно, если сделать это так:

def assert(msg=nil)
    if DEBUG
        raise msg || "Assertion failed!" unless yield
    end
end

Таким образом, вы не решите работать с DEBUG (или каким-либо другим удобным переключателем, я использовал ранее Kernel.do_assert) без каких-либо последствий.

6
ответ дан 24 November 2019 в 12:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: