Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ruby2.1のRefinementsで作るSpockライクなテスト構文

 Ruby2.1のRefinementsで作るSpockライクなテスト構文

RefinementsをRSpecで活用してパラメータライズドテスト用のシンタックスを実現する話。

A5e5ee2fb9e4ce3c728ed9e3ef6e916f?s=128

Tomohiro Hashidate

August 23, 2014
Tweet

Transcript

  1. Ruby2.1ͷRefinementsͰ࡞Δ SpockϥΠΫͳςετߏจ ڮཱ༑޺@joker1007

  2. !KPLFS 3VCZ3BJMT4DBMB ! :PLPIBNBSC 4IJCVZBSC "TBLVTBSC 5%%#$

  3. ؔ੢ਓͰ͢

  4. None
  5. Refinements

  6. ར༻Λએݴͨ͠ίϯςΩετͰͷΈ ϝιου͕ఆٛ͞ΕΔ

  7. • Ruby 2.0͔Β௥Ճ (experimental) • Ruby 2.0ͷrefinements͸τοϓϨϕϧͷΈ • Ruby 2.1͔Βexperimental͡Όͳ͘ͳͬͨ

    • Ruby 2.1͔ΒΫϥεείʔϓͰએݴͰ͖ΔΑ͏ʹͳͬͨ
  8. Ruby 2.1͔Β͸͜͏ॻ͚Δ

  9. Կ͕خ͍͠ͷ͔

  10. ૊ΈࠐΈΫϥεͷ ϝιουΛ্ॻ͖ͯ͠΋ ӨڹൣғΛݶఆͰ͖Δ DSLॻ͖์୊ʂ

  11. ࣮ࡍ͸ͦΕͳΓʹ੍ݶ͕…

  12. ຊ୊

  13. RSpec

  14. Spock

  15. Spock Cool !!

  16. RefinementsͰ RSpecΛͦΕͬΆ͘ॻ͘

  17. rspec-parameterized https://github.com/tomykaira/rspec-parameterized

  18. ͦΕͬΆ͍ʂ

  19. None
  20. ԿΛ΍͍ͬͯΔͷ͔ • binding_of_callerͰݺͼग़͠ݩͷbindingΛऔಘ͢Δ • evalͯ͠ݺͼग़͠ݩͷExampleGroupͷΠϯελϯε Λऔಘ͢Δ • ݺͼग़͠ݩͷΠϯελϯεʹύϥϝʔλʔอ࣋ͷͨ ΊͷΠϯελϯεม਺Λಈతʹఆٛ͢Δ •

    ΦϒδΣΫτΛϥοϓͯ͠Πϯελϯεม਺ʹύϥ ϝʔλʔΛ௥Ճ͍ͯ͘͠ • RSpecͷdescribe͸࣮͸Ϋϥεͷఆٛͱಉ͡ͳͷͰ using͕ར༻Ͱ͖Δ
  21. ࠇຐज़ͩΒ͚ ͔͠΋૊ΈࠐΈϝιουΛ উखʹ࠶ఆٛ ! Ͱ΋usingͯ͠ͳ͍Օॴʹ͸ Ұ੾Өڹແ͠

  22. ·ͱΊ

  23. • Ruby 2.1͔ΒRefinementsͷ੍ݶ͕গ͠؇͘ ͳͬͨ • Refinements͸ϝιουఆٛͷࣗ༝౓Λ޿͛ͯ ͘ΕΔ • ૊ΈࠐΈϝιου΍໊લඃΓΛؾʹͤͣDSLΛ ఆٛͰ͖Δ

    • ·ͩusingએݴͷ੍໿͕ଟ͍ͷͰɺࠓޙͷਐԽʹ ظ଴
  24. Let’s Refine !!