8

Test::Unit テスト用の RSpec の shared_examples に似たプラグイン/拡張機能はありますか?

4

5 に答える 5

6

rails (または単に active_support) を使用している場合は、Concern.

require 'active_support/concern'

module SharedTests
  extend ActiveSupport::Concern

  included do

    # This way, test name can be a string :)
    test 'banana banana banana' do
      assert true
    end

  end
end

active_support を使用していない場合は、そのまま使用してくださいModule#class_eval

この手法は、Andy H.の回答に基づいており、次のように指摘しています。

Test::単体テストはRubyのクラスなので、コード再利用の【通常のテクニック】が使えます

しかし、それを使用できるようにするためActiveSupport::Testing::Declarative#test、アンダースコアキーをすり減らないという利点があります:)

于 2014-12-29T04:53:52.960 に答える
2

次のコードを使用して、共有テスト(RSpec共有例と同様)を実装できました。

module SharedTests
  def shared_test_for(test_name, &block)
    @@shared_tests ||= {}
    @@shared_tests[test_name] = block
  end

  def shared_test(test_name, scenario, *args)
    define_method "test_#{test_name}_for_#{scenario}" do
      instance_exec *args, &@@shared_tests[test_name]
    end
  end
end

Test :: Unitテストで共有テストを定義して使用するには:

class BookTest < ActiveSupport::TestCase
  extend SharedTests

  shared_test_for "validate_presence" do |attr_name|
    assert_false Books.new(valid_attrs.merge(attr_name => nil)).valid?
  end

  shared_test "validate_presence", 'foo', :foo
  shared_test "validate_presence", 'bar', :bar
end
于 2013-02-08T22:19:47.920 に答える
1

Test::Unitテストは単なる Ruby クラスであるため、他の Ruby クラスと同じ方法でコードを再利用できます。

共有の例を書くには、モジュールを使用できます。

module SharedExamplesForAThing
  def test_a_thing_does_something
    ...
  end
end

class ThingTest < Test::Unit::TestCase
  include SharedExamplesForAThing
end
于 2013-01-24T17:27:32.520 に答える
0
require 'minitest/unit'
require 'minitest/spec'
require 'minitest/autorun'

#shared tests in proc/lambda/->
basics = -> do
  describe 'other tests' do
    #override variables if necessary
    before do
      @var  = false
      @var3 = true
    end

    it 'should still make sense' do
      @var.must_equal false
      @var2.must_equal true
      @var3.must_equal true
    end
  end
end

describe 'my tests' do

  before do
    @var = true
    @var2 = true
  end

  it "should make sense" do
    @var.must_equal true
    @var2.must_equal true
  end

  #call shared tests here
  basics.call
end
于 2013-06-06T19:36:55.687 に答える