Perl has a strong history of automated tests. A very early release of Perl 1.0 included a comprehensive test suite, and it's only improved from there. Learning how Perl's test tools work and how to put them together to solve all sorts of previously intractable problems can make you a better programmer in general. Besides, it's easy to use the Perl tools described to handle all sorts of testing problems that you may encounter, even in other languages.
Like all titles in O'Reilly's Developer's Notebook series, this "all lab, no lecture" book skips the boring prose and focuses instead on a series of exercises that speak to you instead of at you.
"Perl Testing: A Developer's Notebook will help you dive right in and:
Write basic Perl tests with ease and interpret the results
Apply special techniques and modules to improve your tests
Bundle test suites along with projects
Test databases and their data
Test websites and web projects
Use the "Test Anything Protocol" which tests projects written in languages other than Perl
With today's increased workloads and short development cycles, unit tests are more vital to building robust, high-quality software than ever before. Once mastered, these lessons will helpyou ensure low-level code correctness, reduce software development cycle time, and ease maintenance burdens.
You don't have to be a die-hard free and open source software developer who lives, breathes, and dreams Perl to use this book. You just have to want to do your job a little bit better.
Preface Chapter 1. Beginning Testing Installing Test Modules Running Tests Interpreting Test Results Writing Your First Test Loading Modules Improving Test Comparisons Chapter 2. Writing Tests Skipping Tests Skipping All Tests Marking Tests as TODO Simple Data Structure Equality Data Composition Testing Warnings Testing Exceptions Chapter 3. Managing Tests Organizing Tests Checking Your Coverage Writing a Testing Library Testing a Testing Library Writing a Testing Harness Testing Across the Network Automating Test Runs Chapter 4. Distributing Your Tests (and Code) Testing POD Files Testing Documentation Coverage Distribution Signatures Testing Entire Distributions Letting the User Decide Letting the User Decide (Continued) Bundling Tests with Modules Collecting Test Results Validating Kwalitee Chapter 5. Testing Untestable Code Overriding Built-ins Mocking Modules Mocking Objects Partially Mocking Objects Overriding Live Code Overriding Operators Everywhere Chapter 6. Testing Databases Shipping Test Databases Testing Database Data Using Temporary Databases Mocking Databases Chapter 7. Testing Web Sites Testing Your Backend Testing Your Frontend Record and Play Back Browsing Sessions Testing the Validity of HTML Running Your Own Apache Server Testing with Apache-Test Distributing Modules with Apache-Test Chapter 8. Unit Testing with Test::Class Writing Test Cases Creating Test Fixtures Inheriting Tests Skipping Tests with Test::Class Marking Tests as TODO with Test::Class Chapter 9. Testing Everything Else Writing Testable Programs Testing Programs Testing Interactive Programs Testing Shared Libraries Index
Ian Langworth has been using Perl since 1997, and actively involved in the Perl community since 2003. In 2004 he contributed Apache-TinyCP and several Kwiki modules to CPAN, and spoke at Perl-related conferences such as YAPC, Usenix, and LISA. chromatic is the technical editor of the O'Reilly Network, specializing in programming, Linux(R), and open source development. He's also been known to evangelize to his co-workers toward better development practices. chromatic has occasionally produced startling numbers of test suites -- and a few testing modules -- for projects including Perl 5, Perl 6, and Parrot. Someday, he'd like to claim some responsibility for improving the quality of all software, by writing articles, producing good code, giving interesting talks, and developing better tools. He lives west of Portland, Oregon with a creek in his backyard and a park one house over. It's too late for him to choose a more realistic-sounding pen name.