Как расширить утверждения Ruby Test :: Unit для включения assert_false? - PullRequest
5 голосов
/ 24 ноября 2011

Очевидно, что в Test :: Unit нет assert_false. Как бы вы добавили его, расширив утверждения и добавив файл config/initializers/assertions_helper.rb?

Это лучший способ сделать это? Я не хочу изменять test/unit/assertions.rb.

Кстати, я не думаю, что это избыточно. Я использовал assert_equal false, something_to_evaluate. Проблема этого подхода в том, что легко использовать assert false, something_to_evaluate. Это всегда будет неудачей, не выдаст ошибку или предупреждение и вызовет ошибки в тестах.

Ответы [ 4 ]

10 голосов
/ 27 февраля 2013

Если вы используете MiniTest (заменено Test :: Unit в Ruby 1.9+), то вы можете использовать метод refute, обратный assert.

4 голосов
/ 09 марта 2014

Rails 4 имеет assert_not, который делает то, что вы хотите.

test "requires valid url" do
  @mymodel.url = "bogus!"
  assert_not @mymodel.valid?
end
4 голосов
/ 24 января 2014

Лично я нахожу имя assert_false лучше, чем refute, потому что оно согласуется со всеми другими утверждениями, и, как правило, оно больше соответствует семантике (аналогично использованию if !condition вместо unless).

Если вы чувствуете то же самое и хотите assert_false, добавьте его в test/test_helper.rb:

class ActiveSupport::TestCase

  ...

  def assert_false(test, message="Expected: false. Actual: #{test}.")
    assert_equal false, test, message
  end

end

РЕДАКТИРОВАТЬ: обратите внимание, что assert !test (предлагается в другом месте) не будет работать, если test равен нулю (! Nil это истина, и мы, вероятно, хотим, чтобы assert_false(nil) не удалось). Так что это прямое сравнение с false.

3 голосов
/ 07 сентября 2012

Просто добавьте удар перед тем, что вы утверждаете:

assert !(something_false)
...