Ruby Test :: Unitアサーションを拡張してassert_falseをインクルードする方法

どうやら、Test :: Unitに assert_false はありません。アサーションを拡張して config/initializers/assertions_helper.rb というファイルを追加すると、どのように追加されますか?

これはこれを行う最善の方法ですか?私は test/unit/assertions.rb を変更したくありません。

ところで、私はそれが重複しているとは思わない。私は assert_equal false、something_to_evaluate を使っていました。このアプローチの問題は、 assert false、something_to_evaluate を誤って使用することが容易であることです。これは常に失敗し、エラーや警告を投げず、バグをテストに招待します。

5
どのリンク? ....
追加された 著者 B Seven,
@Bセブン、あなたはこれを見ましたか?リンク
追加された 著者 Bruno Arueira,
natontesting.com/2009/07/21/add -assert_false-to-rubys-testun‌ it 、作業リンクはハイパーリンクですが、上記と同じです。
追加された 著者 Bruno Arueira,

4 答え

MiniTest(Ruby 1.9以降でTest :: Unitを置き換えた)を使用している場合は、 assert の逆である refute メソッドを使用できます。

9
追加された
これは正しい答えです。
追加された 著者 joncodo,

個人的には、他のすべてのアサーションと一貫しているので、 assert_false という名前は refute よりも優れています。条件ではなくの代わりにを使用します)。

同じように感じて、 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

編集: test がnil(!nilがtrueで、おそらく assert_false(nil))が必要な場合 assert!test が失敗する)。したがって、これは false との直接的な比較です。

4
追加された

Rails 4には、あなたが望むような assert_not があります。

test "requires valid url" do
  @mymodel.url = "bogus!"
  assert_not @mymodel.valid?
end
4
追加された

あなたが主張しているものの前にバングを追加するだけです:

assert !(something_false)
3
追加された