TestUnit - Rubyのテストコードの書き込み( 1/3 )


ミニシリーズ



  • 学習前奏曲
    私は私たちの試験コードを書く方法についての私のジュニア訓練を受けています.私は、すぐにTestUnit、MinitestとRSpecの上でこの前の日曜日に3つのガイドをまとめました.なぜ3つ?私は、変化による学習が完全な知識をもたらすと信じています.
    私はこれらの3つの記事を記事に掲載しなければならないと考えました.「そうでない」という記事を掲載するべきです.
    私はこれらのガイドのそれぞれに挑戦を書いていた.私は、人々が彼らが欲しいかどうか、わかりません.あなたがそれらを望むならば、私に十分な反応を示してください、そして、下記にコメントしてください.

    試験装置
    TestUnitは標準のRubyライブラリです.
    標準のRubyライブラリでは、GEMをインストールする必要はありません.
    TestUnitを使用する最も簡単な例は次の通りです.
    require "test/unit/assertions"
    include Test::Unit::Assertions
    
    hello = 'world'
    
    assert_equal 'world', hello, "hello function should return 'world'"
    

    アサーション関数assert_equal は多くのアサーション関数の一つです.
    アサーション関数は、すべてのテストライブラリの一部であり、
    何かが合格したり失敗します.主張はあなたの“テスト”です.
    TestUnitの一部であるすべてのアサーション関数のリストです.
    実際には、これらのアサーション関数の一握りを使用します.
    assert
    assert_block
    assert_boolean
    assert_compare
    assert_const_defined
    assert_empty
    assert_equal
    assert_fail_assertion
    assert_false
    assert_in_delta
    assert_in_epsilon
    assert_include
    assert_instance_of
    assert_kind_of
    assert_match
    assert_nil
    assert_no_match
    assert_not_const_defined
    assert_not_empty
    assert_not_equal
    assert_not_in_delta
    assert_not_in_epsilon
    assert_not_include
    assert_not_match
    assert_not_nil
    assert_not_predicate
    assert_not_respond_to
    assert_not_same
    assert_not_send
    assert_nothing_raised
    assert_nothing_thrown
    assert_operator
    assert_path_exist
    assert_path_not_exist
    assert_predicate
    assert_raise
    assert_raise_kind_of
    assert_raise_message
    assert_raises
    assert_respond_to
    assert_same
    assert_send
    assert_throw
    assert_throws
    assert_true
    build_message
    flunk
    

    断言する
    最も基本的なアサーション関数はassert and flunk .
    関数シグネチャは、関数の入力と出力を定義します.
    あなたのための技術的な文書の機能署名を見つけることができます
    あなたの言語とライブラリ.の関数シグネチャを見てみましょう
    ' assert andflunk を定義するRubyDocs .

    断言する
    これはassert
    #assert(boolean, message = nil) ⇒ Object
    
    ここで見るassert 入力に2つのパラメータをとります
  • boolean -必須です.
  • メッセージ-オプションです
  • そして、Object .
    これは、この機能を使用する方法です
    # simple.rb
    require "test/unit/assertions"
    include Test::Unit::Assertions
    
    x = true
    
    assert x, "x should pass"
    

    フランク
    これはflunk
    #flunk(message = "Flunked") ⇒ Object
    
    ここで見るflunk 入力に1つのパラメータを指定します.
  • メッセージ-デフォルト値が指定されていない場合は
  • そして、Object .
    これは、この機能を使用する方法です
    # flunk.rb
    require "test/unit/assertions"
    include Test::Unit::Assertions
    
    flunk "throw a failure message"
    
    …の目的flunk 常に失敗したテストです.
    あなたは実用的なユーティリティを見つけることができないflunk
    テスト単位でのテストの適切な書き方
    上の例は、TestUnitを使用するために最も少ない線でしたが、これは正しい方法ではありません.
    正しい方法は別のファイルを作成することです.
    この新しいテストファイルは、テストを希望するコードを必要とし、TestCaseクラスを作成してテスト関数を作成する必要があります.

    ハローワールド
    私たちは、それ自身のファイルの中で単純なクラスをつくりますhello.rb .
    このクラスはクラスメソッドself.hello を返します.
    # hello.rb
    class Hello
      def self.world
        'world2'
      end
    end
    
    新しいファイルを作成しますhello_test.rbファイル名を正確な名前として追加したことに注意してください_test 最後まで.
    後で自動化ツールのためにこのコンベンションに固執したいテストファイルがあるとき、あなたは後で見つけます.
    # hello_test.rb
    require "test/unit"
    require_relative './hello'
    
    class HelloTest < Test::Unit::TestCase
      def test_world
        assert_equal 'world', Hello.world, "Hello.world should return a string called 'world'"
      end
    
      def test_flunk
        flunk "You shall not pass"
      end
    end
    
    定義されたクラスは通常のクラスではなく、ドメイン固有のラングージ(DSL)です.
    DSLは、コード内の言語として動作するようにコードの動作を変更するときです.
    Ruby言語は非常に可憐な言語であり、結果としてDSLSを書くのは簡単です.
    Rubyコミュニティは、DSLSを参照するときにコードが「magic」であると頻繁に言います.
    DSLがどのように明確にされていないかのルールは、共通の混乱につながることができます.
    The HelloTest クラス拡張Test::Unit::TestCase これは、このクラスをDSLに変える「魔法」です.
    このファイルが実行されると、.
    ruby hello_test.rb
    
    テストの結果を出力します.
    この関数は、HelloTest で始まるクラスtest_
  • テクトナムワールド
  • テストストリンク
  • インスタンス関数はtest_ それは実行されません.
    これはこのDSLの規則の一部です.

    テストユニットの思考TestUnit Rubyで唯一のテストフレームワークはありませんMiniTest and Rspec .
    これらの他のテストフレームワークは異なったトレードオフを持っていますが、機能性に類似しています.TestUnit 古い、簡単なテストフレームワークです.
    今後の講演では、両方を調査する予定ですMiniTest and Rspec and
    トレードオフを学ぶ.
    すべてのフレームワークが使用され、それは最も一般的に使用されていると言うのは難しいです
    そしてそれはチームの好みになる.

    コード
    < div >
    < div class ="LagagCount - gig - Link - tag "
    "スクリプトのID "https://gist.github.com/omenking/302ba7e0292cf4bef50287af052a19cb.js//>
    < div >
    < div class ="LagagCount - gig - Link - tag "
    "スクリプトのID "https://gist.github.com/omenking/3dfd6707f3ac8cc06fdd4f40739d03f7.js//>
    < div >
    < div class ="LagagCount - gig - Link - tag "
    "スクリプトのID "https://gist.github.com/omenking/037e1d6732fc8f0db7ea5a93d3c26f91.js//>
    < div >
    < H >

    参考文献
    <高橋潤子>
    < P >https://stackoverflow.com/questions/12317921/why-undefined-method-assert-equal-is-thrown-even-after-requiring-test-unit

    https://apidock.com/ruby/Test/Unit/Assertions

    https://www.rubydoc.info/gems/test-unit/2.3.0/Test/Unit/Assertions

    https://stackoverflow.com/questions/6515333/how-do-i-execute-a-single-test-using-ruby-test-unit

    https://mattbrictson.com/minitest-and-rails