15

irb 内から assert_equal を実行できますか? これは動作しません。

require 'test/unit'
assert_equal(5,5)
4

3 に答える 3

34

できますよ!

require 'test/unit'
extend Test::Unit::Assertions
assert_equal 5, 5                # <= nil
assert_equal 5, 6                # <= raises AssertionFailedError

何が起こっているのかというと、すべてのアサーションはTest :: Unit::Assertionsモジュールのメソッドです。そのモジュールをirb内から拡張すると、これらのメソッドをのクラスメソッドとして使用mainできるようになり、irbプロンプトから直接呼び出すことができます。(実際、extend SomeModule任意のコンテキストで呼び出すと、そのモジュール内のメソッドは、同じコンテキストから呼び出すことがmainできる場所に配置されます。デフォルトでは、たまたまその場所にあります。)

また、アサーションは内から実行されるように設計されているためTestCase、セマンティクスは予想とは少し異なる場合があります。trueまたはfalseを返す代わりに、nilを返すか、エラーを発生させます。

于 2010-10-03T15:04:48.623 に答える
5

あなたもすることができます

raise "Something's gone wrong" unless 5 == 5

テスト中のコードでは使用せずassert、テストコードでのみ使用します。

于 2010-10-03T21:55:20.047 に答える