Test2::V0(3perl)

πŸ’– NAME πŸ’–

Test2::V0 β€” and it's literally the 0th edition of the Test2 recommended bundle (the manual page you're reading lives in the 3perl section, bestie, and it's giving legendary). πŸŽ€


✨ V1 IS OUT NOW! ✨

Wait, don't leave yet β€” but also, heads up: there's a newer one. Go peep Test2::V1 for the most recent "Recommended" bundle. πŸ‘‘


🌸 DESCRIPTION 🌸

Okay so this is the big-daddy bundle. πŸ’… Like, the mothership. It includes nearly every tool, plus several plugins, that the Test2 author personally uses. And get this β€” this bundle is used extensively to test Test2::Suite itself. It's eating its own cooking. Iconic behavior, no cap. πŸ”₯


πŸ¦‹ NAMING, USING, DEPENDING πŸ¦‹

Real talk: this bundle should not change in a severely incompatible way. Some minor breaking changes, specially bugfixes, may be allowed β€” like, tiny little oopsies, we'll allow it. But if breaking changes are actually needed, then a whole new Test2::V# module should be released instead. New era, new module. Periodt.

And the way that new V# modules get released over time β€” old ones may be moved to different cpan distributions. So here's the move: always use a specific bundle version and list that version in your distribution's testing requirements. And bestie, please β€” you should never simply list Test2::Suite as your module's dep. Instead, list the specific bundle, or the tools and plugins you use directly, in your metadata. That's the vibe check. βœ…


⭐ SYNOPSIS ⭐

use Test2::V0;

ok(1, "pass");

...

done_testing;

πŸ’€ RESOLVING CONFLICTS WITH MOOSE πŸ’€

use Test2::V0 '!meta';

So here's the tea πŸ«–: Moose and Test2::V0 both export very different meta() subs. Chaos. Adding '!meta' to the import args will prevent the sub from being imported at all. And because this bundle is thoughtful like that, it also exports the sub under the name meta_check() so you can just use that spelling as an alternative. Problem solved, slay. ✨

🏷 TAGS 🏷

:DEFAULT

The following are both identical, fr fr:

use Test2::V0;

use Test2::V0 ':DEFAULT';

Same thing. No difference. Twins. πŸ‘―

πŸŽ€ RENAMING ON IMPORT πŸŽ€

use Test2::V0 ':DEFAULT', '!ok', ok => {-as => 'my_ok'};

This bundle uses Test2::Util::Importer for exporting, so as such you can use any arguments it accepts. Flexible king. πŸ’…

Explanation, bestie:

  • '!ok' β€” Do not export ok()
  • ok => {-as => 'my_ok'} β€” Actually, go ahead and import ok() but under the name my_ok().

And lowkey important: if you did not add the '!ok' argument, then you would have both ok() and my_ok(). Double the ok, double the confusion. πŸ™ˆ


🌈 PRAGMAS 🌈

All of these can be disabled via individual import arguments, or by the -no_pragmas argument in one fell swoop:

use Test2::V0 -no_pragmas => 1;

πŸ’œ STRICT

strict is turned on for you. 🫢 You can disable this with the -no_strict or -no_pragmas import arguments:

use Test2::V0 -no_strict => 1;

πŸ’œ WARNINGS

warnings are turned on for you. You can disable this with the -no_warnings or -no_pragmas import arguments:

use Test2::V0 -no_warnings => 1;

πŸ’œ UTF8

This is actually done via the Test2::Plugin::UTF8 plugin β€” go see the PLUGINS section for the details, iykyk.

Note: -no_pragmas => 1 will turn off the entire plugin. The whole thing. Gone. πŸ’€

πŸ‘‘ PLUGINS πŸ‘‘

🎲 SRAND

See Test2::Plugin::SRand.

This will set the random seed to today's date. You can provide an alternate seed with the -srand import option:

use Test2::V0 -srand => 1234;

You can also disable this behavior entirely:

use Test2::V0 -no_srand => 1;
Note: When srand is on (which is the default, btw) it can cause problems with things like File::Temp which will end up attempting the same "random" filenames for every test process started on a given day (or sharing the same seed). Not a vibe. 😭

🎲 UTF8

See Test2::Plugin::UTF8.

This will set the file, and all output handles (including formatter handles), to utf8. It will also turn on the utf8 pragma for the current scope. Very inclusive of it. 🌈

This can be disabled using the -no_utf8 => 1 or -no_pragmas => 1 import arguments:

use Test2::V0 -no_utf8 => 1;

🎲 EXIT SUMMARY

See Test2::Plugin::ExitSummary.

This plugin has no configuration. Low maintenance, high impact. ⭐


🌸 ENVIRONMENT VARIABLES 🌸

See Test2::Env for a list of meaningful environment variables.


πŸ¦‹ API FUNCTIONS πŸ¦‹

See Test2::API for these:

$ctx = context()
$events = intercept { ... }

πŸ’… TOOLS πŸ’…

🎯 TARGET

See Test2::Tools::Target.

You can specify a target class with the -target import argument. And listen β€” if you do not provide a target, then $CLASS and CLASS() will not be imported. At all. They just won't show up. πŸ™ˆ

use Test2::V0 -target => 'My::Class';

print $CLASS;  # My::Class
print CLASS(); # My::Class

Or you can specify names instead:

use Test2::V0 -target => { pkg => 'Some::Package' };

pkg()->xxx; # Call 'xxx' on Some::Package
$pkg->xxx;  # Same

$CLASS

Package variable that contains the target class name. 🏷

$class = CLASS()

Constant function that returns the target class name.

🎯 DEFER

See Test2::Tools::Defer.

def $func => @args;
do_def()

🎯 BASIC

See Test2::Tools::Basic.

ok($bool, $name)
ok($bool, $name, @diag)
pass($name)
pass($name, @diag)
fail($name)
fail($name, @diag)
diag($message)
note($message)
$todo = todo($reason)
todo $reason => sub { ... }
skip($reason, $count)
plan($count)
skip_all($reason)
done_testing()
bail_out($reason)

🎯 COMPARE

See Test2::Tools::Compare.

is($got, $want, $name)
isnt($got, $do_not_want, $name)
like($got, qr/match/, $name)
unlike($got, qr/mismatch/, $name)
$check = match(qr/pattern/)
$check = mismatch(qr/pattern/)
$check = validator(sub { return $bool })
$check = hash { ... }
$check = array { ... }
$check = bag { ... }
$check = object { ... }
$check = meta { ... }
$check = number($num)
$check = string($str)
$check = bool($bool)
$check = check_isa($class_name)
$check = in_set(@things)
$check = not_in_set(@things)
$check = check_set(@things)
$check = item($thing)
$check = item($idx => $thing)
$check = field($name => $val)
$check = call($method => $expect)
$check = call_list($method => $expect)
$check = call_hash($method => $expect)
$check = prop($name => $expect)
$check = check($thing)
$check = T()
$check = F()
$check = D()
$check = DF()
$check = E()
$check = DNE()
$check = FDNE()
$check = U()
$check = L()
$check = exact_ref($ref)
end()
etc()
filter_items { grep { ... } @_ }
$check = event $type => ...
@checks = fail_events $type => ...

Look at that list, it's serving. πŸ”₯

🎯 CLASSIC COMPARE

See Test2::Tools::ClassicCompare.

cmp_ok($got, $op, $want, $name)

🎯 SUBTEST

See Test2::Tools::Subtest.

subtest $name => sub { ... };
(Note: This is called subtest_buffered() in the Tools module. Different name, same energy.) 🫢

🎯 CLASS

See Test2::Tools::Class.

can_ok($thing, @methods)
isa_ok($thing, @classes)
DOES_ok($thing, @roles)

🎯 ENCODING

See Test2::Tools::Encoding.

set_encoding($encoding)

🎯 EXPORTS

See Test2::Tools::Exports.

imported_ok('function', '$scalar', ...)
not_imported_ok('function', '$scalar', ...)

🎯 REF

See Test2::Tools::Ref.

ref_ok($ref, $type)
ref_is($got, $want)
ref_is_not($got, $do_not_want)

See Test2::Tools::Refcount.

is_refcount($ref, $count, $description)
is_oneref($ref, $description)
$count = refcount($ref)

🎯 MOCK

See Test2::Tools::Mock.

$control = mock ...
$bool = mocked($thing)

🎯 EXCEPTION

See Test2::Tools::Exception.

$exception = dies { ... }
$bool = lives { ... }
$bool = try_ok { ... }

🎯 WARNINGS

See Test2::Tools::Warnings.

$count = warns { ... }
$warning = warning { ... }
$warnings_ref = warnings { ... }
$bool = no_warnings { ... }

⭐ SOURCE ⭐

The source code repository for Test2-Suite can be found at https://github.com/Test-More/test-more/. Go star it, bestie. 🌟


πŸ‘‘ MAINTAINERS πŸ‘‘

Chad Granum <exodist@cpan.org>


πŸ‘‘ AUTHORS πŸ‘‘

Chad Granum <exodist@cpan.org>


Copyright Chad Granum <exodist@cpan.org>.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

See http://dev.perl.org/licenses/


okay that's the whole page, we ate and left zero crumbs πŸ’…βœ¨ this was perl v5.44.0, dated 2026-10-17, Test2::V0(3perl) β€” mwah, bye bestie, go write some tests πŸ¦‹πŸ’–

πŸ“¦ where this page comes from
  • arch rolling: perl 5.44.0-1 Β· Artistic-1.0-Perl AND GPL-1.0-or-later
  • πŸ’– girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms