Özel bir yöntemle modele sahibim: RSpec,
ile nasıl yapmak istersiniz? Yalnızca özel olanı arama yöntemini test ediyor musunuz?
veya ayrıca özel olanı? eğer öyleyse, nasıl yaparsınız?Özel yöntem nasıl eklenir
cevap
Her zaman bu yaklaşımı uygularım: Sınıfımın ortaya çıkardığı ortak API'yi test etmek istiyorum.
Özel yöntemleriniz varsa, bunları yalnızca diğer sınıflara gösterdiğiniz genel yöntemlerden çağırırsınız. Bu nedenle, bu kamu yöntemlerinin her koşulda beklendiği gibi çalıştığını test ederseniz, aynı zamanda kullandıkları özel yöntemlerin de çalıştığını kanıtlamış olursunuz.
Özellikle karmaşık özel yöntemlerle karşılaştığımı kabul ediyorum. Bunları test etmek istiyorum ekstrem durumda, bunu yapabilirsiniz: Kod kapsama ihtiyaç özel yöntemleri için
@obj.send(:private_method)
(geçici veya kalıcı), geçici bir bağlamda özel yöntemler ifşa etmeye rspec-context-private gem kullanın.
gem 'rspec-context-private'
Projenize paylaşılan bir bağlam ekleyerek çalışır. Bir describe
bloğuna meta veri olarak :private
geçirirseniz
RSpec.shared_context 'private', private: true do
before :all do
described_class.class_eval do
@original_private_instance_methods = private_instance_methods
public *@original_private_instance_methods
end
end
after :all do
described_class.class_eval do
private *@original_private_instance_methods
end
end
end
Ardından, özel yöntemler bu bağlamda herkese açık olacaktır.
class Example
private def foo
'bar'
end
end
describe Example, :private do
it 'can test private methods' do
expect(subject.foo).not eq 'bar'
end
end
Artık bu gemiyi sürdürüp sürdürmediğinizi bilmiyorum, ancak belgeleriniz shared_context bildirmekle ilgili kod bloğuna sahip değil. Bu yüzden sadece belgeleri okuyarak çalışmayı başaramadım. Bu bloğa ekledikten sonra beklendiği gibi çalışıyor. – istrasci
Özel bir yöntem üzerinde bir beklenti test etmek isteyen konum, kabul cevabı gerçekten işe yaramaz (bildiğim, bu yüzden bu noktada düzeltme açığım en az değil). Ne var onun yerine yaptık bile filthier olduğunu - testte kendisinde, sadece onu yeniden tanımlayarak yöntem maruz: Ruby 1.8 üzerinde
def object_to_test.my_private_method
super
end
Çalışır, yeni çalıştırmalar herhangi yorum yapamam.
- 1. Javadoc'ta bir yöntem parametresine başvuru nasıl eklenir?
- 2. Wp_nav_menu'ya özel HTML nasıl eklenir?
- 3. Raylarda Özel istisna nasıl eklenir?
- 4. Bir AutoCompleteTextView'a özel bir adaptör nasıl eklenir
- 5. Özel yöntem aramalarını izleme
- 6. Özel yöntemlerde yöntem Interceptor
- 7. Özel yöntem için ileri bildirim nasıl yapılır?
- 8. Arama özel istifi korunma özel yöntem çağırma
- 9. Kumaş görevine özel bir dekoratör nasıl eklenir
- 10. Wordpress'te özel posta türüne düğme nasıl eklenir?
- 11. SimpleMDE'ye özel bir Markdown işlevi nasıl eklenir?
- 12. asp.net'de özel font nasıl eklenir mvc 5
- 13. CMake: Özel genel derleme kuralı nasıl eklenir?
- 14. Özel Görünüm içinde görünümler nasıl eklenir?
- 15. nasıl eklenir özel Bir ASP.NET denetimi var
- 16. Hizmetin web.config özel bir EndPointBehavior nasıl eklenir?
- 17. Film şeridinde özel UIControl sınıfı nasıl eklenir?
- 18. Web sitemde yammer özel mesajları nasıl eklenir?
- 19. Özel .d.ts dosyam açısal kütüphaneme nasıl eklenir?
- 20. WordPress sonrası sülük özel terim nasıl eklenir?
- 21. Tyeahead için özel açılır menü nasıl eklenir?
- 22. Gadfly.jl'de özel renk haritası nasıl eklenir?
- 23. Doctrine 2 - Özel DBAL sürücüsü nasıl eklenir?
- 24. Visio 2013 eklentisinde Özel Panel nasıl eklenir?
- 25. Twitter Bootstrap'te özel simge nasıl eklenir?
- 26. Eclipse'de hile sayfasına özel komut nasıl eklenir
- 27. CKEditor'da özel bir paragraf biçimi nasıl eklenir?
- 28. AlloyUI form oluşturucuya nasıl özel özellikler eklenir?
- 29. Woocommerce özel sipariş durumu nasıl eklenir?
- 30. 'Pass parametresi' özel olarak nasıl eklenir AuthorizeAttribute
Yardımlarınız için teşekkürler, kamu yöntemini sınamanın da özel bir çalışmayı kanıtladığına katılıyorum. Burada söylenilen gerçekten özel yöntemi test etmek istiyorum ve çözümünüz bir çekicilik gibi çalışıyor, teşekkürler! – Mike
İşte bir başka ilginç yaklaşım http://kailuowang.blogspot.com/2010/08/testing-private-methods-in-rspec.html – gucki
Modelimde, özel bir veri tabanını özel bir veri tabanını özel bir veritabanından kaydeden bir kanca var. 'make_private_token' yöntemi. 'Make_private_token' yöntemi genel sınıf yöntemlerini kullanır, diğer yöntemlerle değil, bu yüzden test edebilmemin tek yolu 'gönder 'yöntemidir. Bu konuda aşırı bir şey görmüyorum ... – Starkers