testing beginner

How to use plan tests count in Perl Test::More?

Question

How to use plan tests count in Perl Test::More?

Understanding plan tests => COUNT in Perl's Test::More

When writing tests in Perl using the Test::More module, the plan function is commonly used to declare how many tests you expect to run. This helps the test harness know when all tests have completed, and it can alert you if you run too few or too many tests.

The simplest way to use plan is to specify the number of tests up front using tests => COUNT. This is especially handy for simple test scripts where you know exactly how many tests you will perform.

Basic Syntax

use Test::More;

plan tests => 3;  # declare we expect exactly 3 tests

ok(1 == 1, 'Test 1');
ok(2 == 2, 'Test 2');
ok(3 == 3, 'Test 3');

Here, we tell Test::More to expect 3 tests. The three ok calls must match that count exactly, or the test suite will report an error.

Why Use plan tests => COUNT?

  • Test counting: Ensures your test script runs exactly the number of tests you expect.
  • Early exits: If your code dies or exits early, Test::More can warn you if fewer tests ran than expected.
  • Automation: Many test harnesses rely on this count to track test results.

Common Gotchas

  • plan must be called once at the beginning of your test script before any test functions.
  • Count mismatch (running more or fewer tests than planned) results in a test failure.
  • Dynamic test counts require a different approach (like using done_testing()).
  • Make sure you do not call plan multiple times in the same script.

Example: Using plan tests => COUNT

use strict;
use warnings;
use Test::More;

# Plan declares exactly 5 tests expected
plan tests => 5;

ok(1 + 1 == 2, 'Simple addition works');
ok('foo' eq 'foo', 'String equality');
ok(4 > 1, 'Number comparison');
ok(length('hello') == 5, 'Length function');
ok(index('Perl', 'erl') == 1, 'Substring position');

Running this with perl test.pl will report 5 tests passed.

Version Notes

  • The plan function and tests => COUNT syntax have been stable since early versions of Test::More.
  • For dynamic or conditional tests in Perl 5.10+, consider done_testing() instead to avoid miscounting.

In summary, use plan tests => COUNT when you can predetermine the number of tests to run in your script. It makes your tests reliable and clearly communicates expectations to the test harness.

Verified Code

Executed in a sandbox to capture real output. • v5.34.1 • 72ms

Tip: edit code and use “Run (Browser)”. Server runs always execute the published, verified snippet.
STDOUT
1..3
ok 1 - Test 1
ok 2 - Test 2
ok 3 - Test 3
STDERR
(empty)

Was this helpful?

Related Questions