62

いくつかのプロジェクトで RSpec を使用した後、minitest/unit を試しています。今のところ気に入っていますが、テスト/仕様を論理的な方法でグループ化するための記述/コンテキスト ブロックの使用が恋しいです。

minitest/spec がこの機能を提供していることは知っていますが、minitest/unit がベアボーン Ruby に少し近い感じがするのが好きです。

minitest/unit の記述/コンテキスト サポートを提供する gem はありますか? それとも、長くて整理されていないテスト ファイルを minitest/unit に保管する必要がありますか?

4

3 に答える 3

57

RSpec から minitest に来て、同じ質問に苦しんでいる人を何人か知っています。彼らは、describe/context ブロックを使用してネストする機能を気に入っており、最小限のテストを続けたいと考えています。いくつかの解決策があります。

  1. minitest の仕様 DSL を使用する: 多少の違いはありますが、仕様 DSL は、rspec DSL の優れた部分のほとんど (すべて?) を提供します。大きな違いは、contextブロックがないことです。しかし、その代わりに簡単に使用できdescribe、すべてが期待どおりに機能します。
  2. ディレクトリとファイルを使用する: 私はこのオプションを好みます。仕様の DSL を使用しているか、従来の xUnit スタイルを使用しているかに関係なく、300 行のテスト ファイルをスクロールするのは好きではありません。無関係なテストを入れ子にすることは役に立ちません。コードを理解するための同じ規則がテストに適用されます。だからそれを壊してください。ディレクトリを作成し、その中にいくつかのファイルを配置します。

私のテストファイルがどのように編成されているかの例を次に示します。

test/
     models/
            user/
                 authentication_test.rb
                 email_test.rb
                 reservation_test.rb
                 user_test.rb
                 username_test.rb

この構造は、仕様の DSL を使用する場合でも xUnit スタイルを使用する場合でも使用します。spec DSL を使用する場合、describe ブロックでテスト対象を次のように指定します。

require "minitest_helper"

describe User, :authentications do

  before do
    # ...
于 2013-01-10T19:24:43.743 に答える
24

複数のクラスを 1 つのテスト ファイルに入れることもできます。

module PizzaTest
  class Isolation < ActiveSupport::TestCase
    test "is awesome by default" do
      assert Pizza.new.awesome?
    end
  end

  class Integration < ActiveSupport::TestCase
    fixtures :all

    test "is awesome too" do
      pizzas('one-with-everything').awesome?
    end
  end
end

さらにネストされたテストクラス:

class PizzaTest < ActiveSupport::TestCase
  test "is awesome by default" do
    assert Pizza.new.awesome?
  end

  class Integration < ActiveSupport::TestCase
    fixtures :all

    test "is awesome too" do
      assert pizzas('one-with-everything').awesome?
    end
  end
end
于 2013-10-14T15:38:32.547 に答える