Slide 1

Slide 1 text

Perl Testing Consideration (seen from other languages) Masaki Nakagawa YAPC::Asia Tokyo 2011 (yapcasia.org/2011/talk/80) 2011೥11݄18೔༵ۚ೔

Slide 2

Slide 2 text

Profile • Masaki Nakagawa • @ikasam_a • metacpan.org/author/MASAKI • MC of Yokohama.pm (yokohama.pm.org) • github.com/masaki • socialbios.com/ikasam_a • “Pushing the Team B” 2011೥11݄18೔༵ۚ೔

Slide 3

Slide 3 text

Thank you ! ameblo.jp/yuki-kashiwagi-we/image-11002817849-11452563522.html 2011೥11݄18೔༵ۚ೔

Slide 4

Slide 4 text

Works • Embedded Development w/ C++ • WebApp. Development w/ Ruby • Project Management (small) • New Business Development • www.ricoh.co.jp/ucs/ • www.ricoh.co.jp/ucs/P3000/ 2011೥11݄18೔༵ۚ೔

Slide 5

Slide 5 text

Embedded Development • “Hardware Driven” • “The Waterfall” • Development Process • QA Process • Systematic Testing 2011೥11݄18೔༵ۚ೔

Slide 6

Slide 6 text

Classification of Testing Perspective Target How What 2011೥11݄18೔༵ۚ೔

Slide 7

Slide 7 text

Perspective • Developer Testing • Acceptance Testing Developer or User (Customer) 2011೥11݄18೔༵ۚ೔

Slide 8

Slide 8 text

Target • Unit Testing • Integration Testing One or More 2011೥11݄18೔༵ۚ೔

Slide 9

Slide 9 text

How • Black Box Testing • White Box Testing Techniques for writing tests 2011೥11݄18೔༵ۚ೔

Slide 10

Slide 10 text

What • Functional Testing • Non-Functional Testing • Performance / Stress / Usability / ... the Purpose of testing 2011೥11݄18೔༵ۚ೔

Slide 11

Slide 11 text

Testing Framework 1. Helping to write tests 2. Executing tests 3. Reporting test results 2011೥11݄18೔༵ۚ೔

Slide 12

Slide 12 text

Ruby Testing survey.hamptoncatlin.com/survey/stats www.atmarkit.co.jp/fcoding/rails/articles/passionate/07/passionate07a.html 2011೥11݄18೔༵ۚ೔

Slide 13

Slide 13 text

e.g.) RSpec 1. describe ... it ... 2. $ rspec ... 3. Spec::Runner::Formatter 2011೥11݄18೔༵ۚ೔

Slide 14

Slide 14 text

e.g.) Cucumber 1. Given ... When ... Then ... 2. $ cucumber ... 3. Cucumber::Formatter 2011೥11݄18೔༵ۚ೔

Slide 15

Slide 15 text

Many Frameworks 2011೥11݄18೔༵ۚ೔

Slide 16

Slide 16 text

Perl Testing 1. Test::More, Test::Class, Test::Base, Test::Spec, ... 2. $ prove ... (TAP::Harness) 3. TAP (TAP::Formatter) 2011೥11݄18೔༵ۚ೔

Slide 17

Slide 17 text

Perl has TAP 2011೥11݄18೔༵ۚ೔

Slide 18

Slide 18 text

TAP • testanything.org • “the Test Anything Protocol” • “is a simple text-based interface” 1..4 ok 1 - Input file opened not ok 2 - First line of the input valid ok 3 - Read the rest of the file not ok 4 - Summarized correctly # TODO Not written yet testanything.org/wiki/index.php/Main_Page 2011೥11݄18೔༵ۚ೔

Slide 19

Slide 19 text

Perl <3 TAP • From any test description • e.g.) Test::Class, Test::Base, Test::Spec • Convert results to non-TAP format • e.g.) TAP::Formatter::JUnit • Easy to write test helpers • e.g.) Test::Exception, Test::Deep, ... 2011೥11݄18೔༵ۚ೔

Slide 20

Slide 20 text

Rails Testing gihyo.jp/magazine/wdpress/archive/2011/vol61 2011೥11݄18೔༵ۚ೔

Slide 21

Slide 21 text

Rails Testing • Perspective • UnitTest, End-to-End • Frameworks • Test::Unit (+ Shoulda), RSpec, Cucumber • Browser Integration • Capybara (rack-test, Selenium, Envjs, ...) • Test Double • rspec-mocks, rr, WebMock 2011೥11݄18೔༵ۚ೔

Slide 22

Slide 22 text

Catalyst • Catalyst::Test • Test::WWW::Mechanize::Catalyst • Test::WWW::Selenium::Catalyst 2011೥11݄18೔༵ۚ೔

Slide 23

Slide 23 text

Plack • Plack::Test • Test::WWW::Mechanize::PSGI 2011೥11݄18೔༵ۚ೔

Slide 24

Slide 24 text

Browser Integration • WWW:: + WAF Customization • WWW::Mechanize • WWW::Selenium (Selenium-RC) • not yet for testing • WWW::HtmlUnit • Selenium::Remote::Driver (WebDriver) 2011೥11݄18೔༵ۚ೔

Slide 25

Slide 25 text

Test Double • Mock • Test::MockObject • Test::Mock::Recorder • Stub • Test::Mock::Guard • Test::Mock::LWP::Dispatch xunitpatterns.com/Test%20Double.html 2011೥11݄18೔༵ۚ೔

Slide 26

Slide 26 text

Test Double • Test::Double (under construction) • 0.01 released ! • metacpan.org/release/Test-Double • github.com/masaki/Test-Double • Mocks and Stubs • mock out w/ mocha style • stub out w/ rr style • Collaborators Welcome!!! xunitpatterns.com/Test%20Double.html 2011೥11݄18೔༵ۚ೔

Slide 27

Slide 27 text

Test Double • Spy • DBD::Mock • Fake • Test::mysqld • Test::TCP xunitpatterns.com/Test%20Double.html 2011೥11݄18೔༵ۚ೔

Slide 28

Slide 28 text

Descriptive Frameworks • Test::More • Test::Class (xUnit style) • Test::Declare / Test::More + “subtest” • Test::Spec (RSpec 1 compat.) • Test::Base (Parameterized Tests) • Test::Cukes / Test::BDD::Cucumber (Cucumber clone) 2011೥11݄18೔༵ۚ೔

Slide 29

Slide 29 text

Weakness • Expectation and Verification • vs. rr, rspec-mocks, mocha, ... • Browser Integration API • vs. Capybara, Webrat, ... • Naming of Test Double modules • Test::Mock::Guard is “Stub” module 2011೥11݄18೔༵ۚ೔

Slide 30

Slide 30 text

Comparision • Pros • TAP-based Test Description • Many Helpful Modules • Cons • Non-Uniform Browser Integration • Poor Expectation and Verification 2011೥11݄18೔༵ۚ೔

Slide 31

Slide 31 text

Conclusions • About Testing • 4 Classifications • 3 Elements in Frameworks • Perl and Ruby/Rails Testing Environments • Perl has TAP and Many Great Modules • Learn and Steal MORE from Ruby/Rails • Write More Descriptively 2011೥11݄18೔༵ۚ೔

Slide 32

Slide 32 text

Thank you! Questions? 2011೥11݄18೔༵ۚ೔