TAP (Test Anything Protocol) is a simple text format for describing test results. Some example TAP output might look like: 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 TAP allows you to : * (optionally) describe the number of tests you expect to run (the test plan) * (optionally) describe the order you expect to run them * describe which tests passed or failed * describe tests that are not run (skipped tests) * describe whether the test was expected to fail (TODO tests) * output diagnostic messages that explain test failure For details see Test::Harness::TAP (http://search.cpan.org/dist/Test-Harness/lib/Test/Harness/TAP.pod) TAP is at the core of the majority of the PerlLanguage testing modules living under the Test:: hierarchy on TheCpan (http://search.cpan.org/search?query=Test%3A%3A%3A&mode=dist). See http://qa.perl.org/test-modules.html for a brief summary of some of them, and http://qa.perl.org for more general information on PerlLanguage testing. The core modules that support TAP in the PerlLanguage are: * Test::Harness (http://search.cpan.org/dist/Test-Harness/) ** Runs test scripts, parses their TAP output and summarises test results. Includes a command line test runner ''prove'' * Test::Builder (http://search.cpan.org/dist/Test-Builder/) ** Base module used to write PerlLanguage testing modules that output TAP * Test::Simple (http://search.cpan.org/dist/Test-Simple/) ** The minimum you need to start writing TAP tests. Allows you to specify a test plan and whether tests pass or fail. * Test::More (http://search.cpan.org/dist/Test-Simple/lib/Test/More.pm) ** Extends Test::Simple with a bunch of useful assertions. While TAP is most commonly used with the PerlLanguage, it's simple enough that you can hack together a basic TAP library with very little effort. TAP libraries exist for PhpLanguage (http://shiflett.org/archive/176), JavaScript (http://www.openjsan.org/doc/t/th/theory/Test/Simple/) and many other languages. Since TAP tries to be methodology agnostic, you can integrate different testing modules with different testing styles together under a single test harness (e.g., both the xUnit-ish PerlTestClass and the specification-based LectroTest output TAP). Since TAP is just ASCII it is easy to throw around with pipes, SSH, etc., so you can throw together cross-platform, multi-language, multi-server test farms using your standard Unix toolset. ---- CategoryPerl, CategoryTesting