Как лучше всего использовать утверждения в Ruby, но не как часть модульных тестов? - PullRequest
3 голосов
/ 15 декабря 2011

Я хочу использовать assert для вызова ошибки в задаче rake.

the_index = items.index(some_item)
assert_not_nil the_index, "Lookup failed for the following item: " + some_item

Я получаю undefined method assert_not_nil. Могу ли я включить файл утверждений в задачу rake? Как?

Это лучшая практика или есть лучший способ сделать это?

Работа в Ruby 1.9.2.

Ответы [ 3 ]

5 голосов
/ 30 декабря 2011

Вы можете использовать утверждения в любом месте.

require "minitest/unit"
include MiniTest::Assertions # all assertions are in this module
refute_nil @ivar, "An instance variable should not be nil here!"

Но зачем ты это делаешь? Вместо этого сами поднимите значимые исключения.

3 голосов
/ 15 декабря 2011

Существует встроенный метод Array#fetch, который действует как #[], но вызывает IndexError вместо возврата nil, когда элемент не найден.(То же самое относится и к Hash.) Я всегда использую первый, если не ожидаю, что коллекция исключит элемент.

a = [:foo, :bar]
a.fetch(0)   #=> :foo
a[4]         #=> nil
a.fetch(4)   #=> IndexError: index 4 outside of array bounds: -2...2

А для других случаев возбудите исключения самостоятельно, как предлагает Брамха Гош:

raise "I don't expect this to be nil!" if element.nil?

Однако вам не следует делать это часто, только если вы знаете, что ваш код потерпит неудачу, делая отладку болезненной.

1 голос
/ 15 декабря 2011

Есть ли особая причина, по которой вы хотите использовать assert?

Почему бы не

raise IndexError, "Lookup failed for the following item: #{some_item}" unless items.include? some_item
...