Test :: Birim testleri için RSpec'te paylaşılan_examples benzeri bir eklenti/uzantı var mı?RSpec'in Ruby Test :: Unit'deki davranış gibi paylaşılan örneklerini nasıl alabilirim?
cevap
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
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
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
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
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 :)
- 1. Bir Bluemix uygulamasının örneklerini azaltırken davranış
- 2. Ruby sınıfının adını nasıl alabilirim?
- 3. Ruby test kapsamı aracı
- 4. facebook fotoğraflarını test kullanıcılarından nasıl geri alabilirim?
- 5. Kod örneklerini nasıl büyütürüm?
- 6. iyi yolu Ruby gibi
- 7. SonarQube API ile test bilgilerini nasıl alabilirim?
- 8. Ruby On Rails: Modeller arasında paylaşılan yöntem
- 9. Excel, SlickGrid ile davranış gibi Excel
- 10. Davranış
- 11. Python'daki özelliklerin örneklerini C örneğinde olduğu gibi kullanma C#
- 12. ModelChoiceField örneklerini şablonda nasıl edinilir
- 13. Groovy takas değişkenleri gibi ruby
- 14. Davranış
- 15. Yeniden örneklerini
- 16. boost :: regexp'in beklenmedik davranış
- 17. Ayrılmış Amazon EC2 örneklerini yönetme
- 18. Emacs yakut modlu girinti davranış metin modunda
- 19. Davranış
- 20. Bir Ruby modülünden yalnızca birkaç işlevi nasıl alabilirim?
- 21. Ruby: Minitest, test birimi ve örnek değişkenleri
- 22. Dizisi - ilginç davranış
- 23. Bir sınıfın örneklerini sayma?
- 24. ember.js: İç içe bakış örneklerini nasıl erişilir
- 25. Davranış: uzunluk: freeWhenDone:
- 26. ruby Test :: Birim Komut satırı seçenekleri?
- 27. Çoklu Internet Explorer örneklerini
- 28. Sohbet uygulaması Ruby on Rails'de nasıl test edilir?
- 29. php garip davranış dizisine erişim garip davranış
- 30. SQL Server 2000 Tek takın Tetik Davranış Recursive gibi