diff --git c/t/madness_json.t w/t/madness_json.t
index 2272548..fafa00b 100644
--- c/t/madness_json.t
+++ w/t/madness_json.t
@@ -248,13 +248,14 @@ format STDOUT =
        JSB => $jstrue,
        );

+    my $expect;
    # Dumping differences per perl version:
    # 5.12.0+:
    #
    #   IO handles are now blessed into IO::File, I guess?
    #
    if ( $] >= 5.012_000 ) {
-        my $expect = <<'EXPECT';
+        $expect = <<'EXPECT';
$HASH1 = {
           AR  => [
                    1,
@@ -292,10 +293,9 @@ EXPECT
           ) !~ 'refs') {
            $expect =~ s/strict 'refs'/strict/;
        }
-        same( $dump= $o->Data(\%hash)->Out, template( $expect, expected_dot => $expected_dot ), "", $o);
    }
    elsif ( $] >= 5.008_008 ) {
-        same( $dump= $o->Data(\%hash)->Out, template( <<'EXPECT', expected_dot => $expected_dot ), "", $o);
+        $expect = <<'EXPECT';
$HASH1 = {
           AR  => [
                    1,
@@ -329,7 +329,7 @@ bless( $HASH1->{JSB}, 'JSON::XS::Boolean' );
EXPECT
    }
    elsif ( $] >= 5.008_000 ) {
-        same( $dump= $o->Data(\%hash)->Out, template( <<'EXPECT', expected_dot => $expected_dot ), "", $o);
+        $expect = <<'EXPECT';
$HASH1 = {
           AR  => [
                    1,
@@ -363,7 +363,7 @@ bless( $HASH1->{JSB}, 'JSON::XS::Boolean' );
EXPECT
    }
    else {
-        same( $dump= $o->Data(\%hash)->Out, template( <<'EXPECT', expected_dot => $expected_dot ), "", $o);
+        $expect = <<'EXPECT';
$HASH1 = {
           AR  => [
                    1,
@@ -388,6 +388,11 @@ $HASH1 = {
bless( $HASH1->{JSB}, 'JSON::XS::Boolean' );
EXPECT
    }
+    # In JSON::XS < 3, the boolean class is JSON::XS::Boolean
+    # In JSON::XS >= 3, the boolean class is JSON::PP::Boolean
+    my $json_boolean_class = ref JSON::XS::decode_json("true");
+    $expect =~ s{JSON::XS::Boolean}{$json_boolean_class}g;
+    same( $dump= $o->Data(\%hash)->Out, template( $expect, expected_dot => $expected_dot ), "", $o);
}

sub template {