2013-01-24 8 views

cevap

0

Test::Unit testleri yalnızca Ruby sınıflarıdır, böylece aynı Ruby sınıfındaki diğer tüm yöntemleri yeniden kullanabilirsiniz.

Paylaşılan örnekleri yazmak için bir modül kullanabilirsiniz. tanımlayabilir ve Test :: Unit testinde paylaşılan testleri kullanmak için

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 

:

module SharedExamplesForAThing 
    def test_a_thing_does_something 
    ... 
    end 
end 

class ThingTest < Test::Unit::TestCase 
    include SharedExamplesForAThing 
end 
2

Aşağıdaki kodu kullanarak (RSpec örnekler paylaştı benzer) paylaşılan testleri uygulamak başardı
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 
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 
0

Bu yazıya birkaç yıl önce yazdım. Hala harika çalışıyor:

# adapter_test.rb 
require 'test_helper' 

shared_examples_for 'An Adapter' do 
    describe '#read' do 
    # ... 
    end 
end 

https://gist.github.com/jodosha/1560208 böyle Kullanılan:

# memory_test.rb 
require 'test_helper' 

describe Memory do 
    it_behaves_like 'An Adapter' 
end 
2

mı (active_support ya) raylar kullanıyorsanız, bir Concern kullanın. Eğer active_support kullanmıyorsanız

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 

, sadece Module#class_eval kullanın.

Bu teknik o işaret Andy H. 'ın cevabı, üzerine inşa: Eğer kodu yeniden [Normal teknikleri] kullanabilmesi

Testi :: Birim testleri, sadece Ruby sınıfları vardır

ancak ActiveSupport::Testing::Declarative#test kullanımını etkinleştirdiğinden, alt çizgi anahtarınızı takmamanın avantajı vardır :)