Blog::kobaken

prove t/foo/bar/baz.t

JSONが正しくエンコードされているか、Cpanel::JSON::XSで手軽に確認する

Perl Advent Calendar 2021 でお送りします。


Perlで、JSON文字列が期待通りか、Cpanel::JSON::XSでテストできます。具体的には、$json->decode($json_string, $json_type)の第二引数にスカラ変数 $json_typeを渡すと、どうdecodeしたか型情報が入ります。以下のコードだと、[false]をdecodeをして、booleanとしてデコードしたことがわかります。

use Test2::V0;

use Cpanel::JSON::XS;
use Cpanel::JSON::XS::Type;

my $json = Cpanel::JSON::XS->new;

$json->decode('[false]', my $json_type);
is   $json_type, [JSON_TYPE_BOOL];
isnt $json_type, [JSON_TYPE_STRING];
isnt $json_type, [JSON_TYPE_INT];

done_testing;

Test2::Tools::JSON の方がテスト用途に最適化されて、使いやすい気がしないでもないですが、Cpanel::JSON::XS::Typeで定義した構造がすでに存在するならば、DRYで良さそう。*1

*1:書いていて思ったけど、Cpanel::JSON::XS::Typeで作った構造から、テスト用のmatcherを生成する方がテストでは便利かもしれない。