Test2::Bundle::More(3pm) Perl Programmers Reference Guide Test2::Bundle::More(3pm)

# [NAME](#NAME)

Test2::Bundle::More - ALMOST a drop-in replacement for Test::More.

# [DESCRIPTION](#DESCRIPTION)

This bundle is intended to be a (mostly) drop-in replacement for Test::More. See "KEY DIFFERENCES FROM Test::More" for details.

# [SYNOPSIS](#SYNOPSIS)

```
    use Test2::Bundle::More;
    ok(1, "pass");
    ...
    done_testing;
```

# [PLUGINS](#PLUGINS)

This loads Test2::Plugin::ExitSummary.

# [TOOLS](#TOOLS)

These are from Test2::Tools::Basic. See Test2::Tools::Basic for details.

[ok($bool, $name)](#ok%28$bool,)

[pass($name)](#pass%28$name%29)

[fail($name)](#fail%28$name%29)

[skip($why, $count)](#skip%28$why,)

$todo = todo($why)

[diag($message)](#diag%28$message%29)

[note($message)](#note%28$message%29)

[plan($count)](#plan%28$count%29)

[skip\_all($why)](#skip_all%28$why%29)

[**done\_testing()**](#done_testing%28%29)

[BAIL\_OUT($why)](#BAIL_OUT%28$why%29)

These are from Test2::Tools::ClassicCompare. See Test2::Tools::ClassicCompare for details.

[is($got, $want, $name)](#is%28$got,)

[isnt($got, $donotwant, $name)](#isnt%28$got,)

[like($got, qr/match/, $name)](#like%28$got,)

[unlike($got, qr/mismatch/, $name)](#unlike%28$got,)

[is\_deeply($got, $want, "Deep compare")](#is_deeply%28$got,)

[cmp\_ok($got, $op, $want, $name)](#cmp_ok%28$got,)

These are from Test2::Tools::Class. See Test2::Tools::Class for details.

[isa\_ok($thing, @classes)](#isa_ok%28$thing,)

[can\_ok($thing, @subs)](#can_ok%28$thing,)

This is from Test2::Tools::Subtest. It is called subtest\_streamed() in that package.

[subtest $name =&gt; sub { ... }](#subtest)

# [KEY DIFFERENCES FROM Test::More](#KEY_DIFFERENCES_FROM_Test::More)

[You cannot plan at import.](#You)

THIS WILL **NOT** WORK:

```
    use Test2::Bundle::More tests => 5;
    
```

Instead you must plan in a separate statement:

```
    use Test2::Bundle::More;
    plan 5;
    
```

[You have three subs imported for use in planning](#You~2)

Use plan($count), skip\_all($reason), or done\_testing() for your planning.

[isa\_ok accepts different arguments](#isa_ok)

"isa\_ok" in Test::More was:

```
    isa_ok($thing, $isa, $alt_thing_name);
    
```

This was very inconsistent with tools like "can\_ok($thing, @subs)".

In Test2::Bundle::More, isa\_ok() takes a $thing and a list of @isa.

```
    isa_ok($thing, $class1, $class2, ...);
    
```

## [THESE FUNCTIONS AND VARIABLES HAVE BEEN REMOVED](#THESE_FUNCTIONS_AND_VARIABLES_HAVE_BEEN_REMOVED)

$TODO

See todo().

[**use\_ok()**](#use_ok%28%29)

[**require\_ok()**](#require_ok%28%29)

These are not necessary. Use "use" and "require" directly. If there is an error loading the module the test will catch the error and fail.

[**todo\_skip()**](#todo_skip%28%29)

Not necessary.

[**eq\_array()**](#eq_array%28%29)

[**eq\_hash()**](#eq_hash%28%29)

[**eq\_set()**](#eq_set%28%29)

Discouraged in Test::More.

[**explain()**](#explain%28%29)

This started a fight between Test developers, who may now each write their own implementations in Test2. (See explain in Test::Most vs Test::More. Hint: Test::Most wrote it first, then Test::More added it, but broke compatibility).

[**new\_ok()**](#new_ok%28%29)

Not necessary.

# [SOURCE](#SOURCE)

The source code repository for Test2-Suite can be found at *https://github.com/Test-More/test-more/*.

# [MAINTAINERS](#MAINTAINERS)

[Chad Granum &lt;exodist@cpan.org&gt;](#Chad)

# [AUTHORS](#AUTHORS)

[Chad Granum &lt;exodist@cpan.org&gt;](#Chad~2)

# [COPYRIGHT](#COPYRIGHT)

Copyright Chad Granum &lt;exodist@cpan.org&gt;.

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/*

2026-10-21 perl v5.44.0

---

Document: Test2::Bundle::More(3pm) from perl 5.44.0-r2 (Chainguard OS)
Source: https://github.com/Perl/perl5.git
