2011年07月30日

皆さん subtest 使ってますか?僕はよく使ってます。
でも最近いろいろとアレげだなーと思っていることがあって、適当に Test::Flatten とかいう謎モジュールをでっち上げてみました。

 xaicron/p5-Test-Flatten - GitHubはてブ

キャプションが最後に来る

use Test::More;

subtest 'foo' => sub {
    pass 'ok';
};

done_testing;

というようなテストを走らせた場合の TAP 出力は以下のようになりますが、その subtest が終わったあとになって初めて「ああ、このテストは foo だったのかー」とわかります。

$ prove -lvc t/foo.t
t/foo.t .. 
    ok 1 - ok
    1..1
ok 1 - foo
1..1
ok

その subtest の開始時に見たいですね。

本当のテスト数がまとめられてしまう

use Test::More;

subtest 'foo' => sub {
    pass 'bar';
    pass 'baz';
};

done_testing;
$ prove -lvc t/foo.t
t/foo.t .. 
    ok 1 - bar
    ok 2 - baz
    1..2
ok 1 - foo
1..1

こんなかんじで、テスト数が、subtest 1つで 1 としてカウントされてしまいます。

例えば、実際にどの位の数のテストを本当に行っているかを集計したい場合とかは、ちょこっと悲しい感じです。
いっぱいテスト書いたのに、結果が超少ない!とかなってしまう!!(まぁ別にテストの数を競うゲームとかじゃないしいいんですけど)

fork したテストが壊れる

fork したテストは、Test::More 自体ではそもそも壊れるのですが、Test::SharedFork を使うことで正しくテストを行うことができます。

しかし、subtest を使った場合は、いい感じになりません。テストのカント数が混ざったりなんだりでぐちゃぐちゃです><*1

そもそも以下のテストがコケませんし。なんてっこった!

use Test::More;

subtest 'foo' => sub {
    pass 'parent one';
    pass 'parent two';
    my $pid = fork;
    unless ($pid) {
        pass 'child one';
        pass 'child two';
        fail 'child three';
        exit;
    }
    wait;
    pass 'parent three';
};

done_testing;
t/foo.t .. 
    ok 1 - parent one
    ok 2 - parent two
    ok 3 - child one
    ok 4 - child two
    not ok 5 - child three
    
    #   Failed test 'child three'
    #   at t/foo.t line 13.
    ok 3 - parent three
    1..3
ok 1 - foo
1..1
ok

というわけで、全部解決する Test::Flatten をかいたよー

使い方はベリーシンプルで、Test::More と一緒に use するだけです。ロード順も特に気にしなくて OK。

use Test::More;
use Test::SharedFork;
use Test::Flatten;

subtest 'foo' => sub {
    pass 'parent one';
    pass 'parent two';
    my $pid = fork;
    unless ($pid) {
        pass 'child one';
        pass 'child two';
        fail 'child three';
        exit;
    }
    wait;
    pass 'parent three';
};

done_testing;

これを気ままに実行すると、

20110730193943

みたいな感じになって、いいかんじですね!!

実装としては、Test::More::subtest を上書きして、ただ渡されたテストコードを実行してるだけです。
キャプションはテストを走らせる前に、note で出力しているので、make test の時とかは普通に消えてくれます。

ボーダーの色を変えることもできますが、ちょこっとこのあたりは変更予定。

追記

ちなみに、

$ prove -lvc --exec "perl -MTest::Flatten" t/foo.t

とかすると、既存の Test::Flatten を使ってないテストもいい感じになります。

  • *1 : これは Test::SharedFork をにパッチを送るべきなのかもしれないですが、結構大変そう...
xaicron at 19:47コメント(81)Perl   このエントリーをはてなブックマークに追加
編集

コメント一覧

1. Posted by kata cinta romantis   2013年12月21日 03:42

この記事は非常に良いですが、それでは書き続けるし、うまくいけば、このブログが成功になりましょう!
2. Posted by kata kata bijak kehidupan   2014年02月13日 22:10
私はかなり理解していないが、このブログは非常にシンプルで興味深い情報ですが。ありがとう
3. Posted by nama bayi perempuan   2014年02月21日 05:40
この記事は非常に興味深いものです
4. Posted by pakar seo   2014年02月22日 03:51
これは良いニュースですが、私は読んでいる
5. Posted by kata kata cinta   2014年03月10日 04:52
この記事は非常に良いですが、それでは書き続けるし、うまくいけば、このブログが成功になりましょう
6. Posted by Cara menghilangkan jerawat   2014年03月10日 04:52
この記事は非常に良いですが、それでは書き続けるし、うまくいけば、このブログが成功になりましょう
7. Posted by dp bbm bergerak   2014年03月27日 16:03
このブログは、私がこのブログを愛し、私に知識を与えます。
8. Posted by gambar bergerak   2014年03月27日 16:03
私は、非常に有用な記事のすべてを読むことが幸せです。私はこのブログであることが幸せです。
9. Posted by kata cinta   2014年04月21日 20:46
このブログは、私がこのブログを愛し、私に知識を与えます。
10. Posted by Cerita Lucu   2014年04月24日 15:42
この記事は非常に興味深いものです
11. Posted by status fb   2014年05月09日 21:08
私はかなり理解していないが、このブログは非常にシンプルで興味深い情報ですが。ありがとう
12. Posted by kata kata galau   2014年05月09日 21:09
これは良いニュースですが、私は読んでいる
13. Posted by kata kata motivasi   2014年05月09日 21:10
この記事は非常に良いですが、それでは書き続けるし、うまくいけば、このブログが成功になりましょう
14. Posted by operatorku   2014年05月12日 19:21
これは実際に読むことは非常に興味深い記事です!
更新された場合に、より良く、より面白いかもしれ
15. Posted by hadirlah   2014年05月20日 23:42
このブログに興味深い記事が、私はこのブログであることがとてもうれしいです。
16. Posted by kata kata lucu   2014年06月04日 12:08
これは実際に読むことは非常に興味深い記事です!
更新された場合に、より良く、より面白いかもしれ
17. Posted by kata kata cinta   2014年06月04日 20:39
これは良いニュースですが、私は読んでいる
18. Posted by kata kata cinta romantis   2014年06月11日 03:03
非常に素晴らしいのニュース、インドネシアの国民の成功を読み、挨拶、私たちへの書き込みをありがとうございました
19. Posted by kata kata mutiara   2014年06月16日 05:47
ありがとうございます、あなたの文章が読み、非常に良いと面白いです
20. Posted by saatnya   2014年06月18日 03:33
良いニュースは、ありがとうございました!
21. Posted by kata kata cinta   2014年06月19日 09:00
非常に興味深い記事、ありがとうございました
22. Posted by kata kata galau   2014年06月24日 08:12
これは良いニュースですが、私は読んでいる
23. Posted by kata kata galau   2014年06月28日 17:23
ありがとうございます、あなたの文章が読み、非常に良いと面白いです
24. Posted by model rumah minimalis   2014年07月08日 13:17
非常に素晴らしいのニュース、インドネシアの国民の成功を読み、挨拶、私たちへの書き込みをありがとうございました
25. Posted by resep kue   2014年07月14日 03:12
素晴らしい記事、ありがとうございました
26. Posted by kumpulan kata kata cinta romantis buat pacar   2014年07月21日 12:24
非常に記事ここに有用な情報をたくさん見つける幸いです
27. Posted by kata kata cinta   2014年09月04日 23:12
私は、非常に有用な記事のすべてを読むことが幸せです。私はこのブログであることが幸せです。
28. Posted by Kumpulan Kata Kata Cinta Terbaru Untuk Pacar   2014年09月15日 16:25
これは良いニュースですが、私は読んでいる
29. Posted by kata kata galau sedih   2014年09月21日 10:22
私はかなり理解していないが、このブログは非常にシンプルで興味深い情報ですが。ありがと
30. Posted by status fb wanita   2014年09月21日 19:11
飲んだ後に行ってみたい店だな
31. Posted by jasa fotocopy murah   2014年09月25日 19:05
書き込みは、注意することは興味深い
32. Posted by kata kata galau   2014年09月29日 12:09
このブログは、私がこのブログを愛し、私に知識を与えます。
33. Posted by kata kata gombal   2014年09月29日 17:18
非常に興味深い記事が私達とこの情報を共有していただきありがとうございます
34. Posted by pakar seo   2014年10月02日 22:42
良いニュースと面白い、ありがとう
35. Posted by ucapan selamat ulang tahun   2014年10月03日 20:11
これ以上の興味深い最新のニュースの更新
36. Posted by jasa fotocopy murah   2014年10月04日 11:05
これは良いニュースですが、私は読んでいる
37. Posted by cetak yasin   2014年10月12日 21:58
ジャカルタの場所印刷とブック安いヤシンレター
38. Posted by kata kata galauu   2014年10月13日 19:02
飲んだ後に行ってみたい店だ
39. Posted by uda rino   2014年10月24日 03:20
ジャカルタの安いコピーや印刷の専門家
40. Posted by kata kata galau   2014年11月19日 04:33
私はかなり理解していないが、このブログは非常にシンプルで興味深い情報ですが。ありがとう
41. Posted by kata kata bijak   2014年11月26日 13:43
ポスティング経由で重要な情報を提供していただきありがとうございます。我々は、このポストを取得するために取らなければならない。
42. Posted by status fb lucu   2014年12月15日 12:35
非常に記事ここに有用な情報をたくさん見つける幸いです
43. Posted by 黄 水着   2015年01月11日 16:00
1275ッピングカィンざaがベルッピングカィンざ
44. Posted by Status Facebook Lucu   2015年01月20日 09:04
更新された場合に、より良く、より面白いかもし
45. Posted by Jasa FotoCopy Murah di rawamangun   2015年02月03日 09:15
これ以上の興味深い最新のニュースの更新
46. Posted by CETAK BUKU   2015年04月10日 20:58
5 あなたの記事は、特に私は、喜んで情報をありがとうあなたのブログを訪問することが、多くの人々のために非常に興味深いです
47. Posted by batu akik   2015年05月01日 05:39
私たちに情報を提供するためにありがとうございました。
48. Posted by kata kata galau   2015年05月26日 14:05
インドネシアの国民の成功を読み、挨拶、私たちへの書き込みをありがとうございました ???
49. Posted by Jasa Cetak Buku Murah Rawamangun Jakarta   2015年06月04日 02:11
非常に記事ここに有用な情報をたくさん見つける幸いです
50. Posted by Cetak buku murah   2015年06月04日 02:12
良いニュースと面白い、ありがとう
51. Posted by Cetak buku murah   2015年06月04日 02:12
これは良いニュースですが、私は読んでいる
52. Posted by Style Masa Kini   2016年01月24日 03:37
ジャカルタの安いコピーや印刷の専門家
53. Posted by Style Masa Kini   2016年01月26日 12:29
この記事は非常に良いですが、それでは書き続けるし、うまくいけば、このブログが成功になりましょう
54. Posted by Style Masa Kini   2016年01月26日 12:30
この記事は非常に良いですが、それでは書き続けるし、うまくいけば、このブログが成功になりましょう!
55. Posted by Style Masa Kini   2016年01月26日 12:31
これは良いニュースですが、私は読んでいる
56. Posted by Style Masa Kini   2016年01月26日 12:32
ありがとうございます、あなたの文章が読み、非常に良いと面白いです
57. Posted by Style Masa Kini   2016年01月27日 12:11
この記事は非常に良いですが、それでは書き続けるし、うまくいけば、このブログが成功になりましょう
58. Posted by Kata Kata Mutiara Cinta   2016年01月28日 10:26
私は、非常に有用な記事のすべてを読むことが幸せです。私はこのブログであることが幸せです。
59. Posted by Style Masa Kini   2016年01月28日 13:45
ジャカルタの安いコピーや印刷の専門家
60. Posted by Kata Kata Remaja   2016年03月08日 23:15
良いニュースと面白い、ありがとう
61. Posted by Jasa Percetakan dan Jasa Fotocopy Murah Rawamangun Jakarta   2016年04月02日 00:29
ポスティング経由で重要な情報を提供していただきありがとうございます。我々は、このポストを取得するために取らなければならない。
62. Posted by Kata Kata Remaja   2016年04月13日 00:25
この記事は非常に良いですが、それでは書き続けるし、うまくいけば、このブログが成功になりましょう
63. Posted by Kata Kata Remaja   2016年05月12日 00:19
この記事は非常に良いですが、それでは書き続けるし、うまくいけば、このブログが成功になりましょう
64. Posted by Kata Kata Remaja   2016年06月09日 22:21
非常に素晴らしいのニュース、インドネシアの国民の成功を読み、挨拶、私たちへの書き込みをありがとうございました
65. Posted by kata galau   2016年06月23日 04:25
私は本当に私のためにこのウェブサイトの内容は、すべて新しいものと新しいレッスンが好き。非常に増加知識の普及に伴い、提供された情報のためにありがとうございました
66. Posted by Jasa Percetakan dan Jasa Fotocopy Murah Rawamangun Jakarta   2016年06月23日 05:15
非常に素晴らしいのニュース、インドネシアの国民の成功を読み、挨拶、私たちへの書き込みをありがとうございました
67. Posted by Kata Kata Remaja   2016年07月30日 16:56
私はかなり理解していないが、このブログは非常にシンプルで興味深い情報ですが。ありがとう
68. Posted by Kata Kata Mutiara   2016年08月04日 17:58
私は本当に私のためにこのウェブサイトの内容は、すべて新しいものと新しいレッスンが好き。非常に増加知識の普及に伴い、提供された情報のためにありがとうございました
69. Posted by Kata Kata Cinta   2016年09月25日 04:36
非常に素晴らしいのニュース、インドネシアの国民の成功を読み、挨拶、私たちへの書き込みをありがとうございました
70. Posted by Kata Kata Galau   2016年10月04日 00:21
これは良いニュースですが、私は読んでいる
71. Posted by Cetak Murah Rawamangun Jakarta Timur   2016年10月14日 03:59
これは良いニュースですが、私は読んでいる
72. Posted by Kata Kata Bijak   2016年10月14日 23:20
この記事は非常に良いですが、それでは書き続けるし、うまくいけば、このブログが成功になりましょう!
73. Posted by Blog Remaja Indonesia   2016年10月22日 15:34
私は本当に私のためにこのウェブサイトの内容は、すべて新しいものと新しいレッスンが好き。非常に増加知識の普及に伴い、提供された情報のためにありがとうございました
74. Posted by iklanluki   2017年06月09日 14:55
私はこの記事の新しい科学を持っていることを嬉しく思います
75. Posted by MURNI JAYA Printing   2017年09月27日 09:28
私は本当に私のためにこのウェブサイトの内容は、すべて新しいものと新しいレッスンが好き。非常に増加知識の普及に伴い、提供された情報の
私は本当に私のためにこのウェブサイトの内容は、すべて新しいものと新しいレッスンが好き。非常に増加知識の普及に伴い、提供された情報のためにありがとうございました
77. Posted by PERCETAKAN ANGKASA GRAFIKA   2017年12月13日 00:50
この記事は非常に良いですが、それでは書き続けるし、うまくいけば、このブログが成功になりましょう!
78. Posted by djpunjab   2018年01月29日 18:12
私は本当に私のためにこのウェブサイトの内容は、すべて新しいものと新しいレッスンが好き。非常に増加知識の普及に伴い、提供された情報の
79. Posted by DJ HENDRA R   2018年02月05日 01:02
私は本当に私のためにこのウェブサイトの内容は、すべて新しいものと新しいレッスンが好き。非常に増加知識の普及に伴い、提供された情報のためにありがとうございました
80. Posted by Free Download Lagu Mp3 Dugem House Music Nonstop Remix Terbaru   2018年06月07日 04:37
私は本当に私のためにこのウェブサイトの内容は、すべて新しいものと新しいレッスンが好き。非常に増加知識の普及に伴い、提供された情報の
81. Posted by Print Percetakan Fotocopy Murah Dan Cepat Layanan 24 Jam Jakarta   2018年06月16日 03:12
私は本当に私のためにこのウェブサイトの内容は、すべて新しいものと新しいレッスンが好き。非常に増加知識の普及に伴い、提供された情報のためにありがとうございました

コメントする

名前:
URL:
  情報を記憶: 評価:  顔   星
  絵文字
 
 
プロフィール

Perlが少しだけ出来る気になってます。
JavaScriptはよくわかりません。
Rubyもちんぷんかんぷんです。
Pythonは難しいです。
ActionScript勘弁してください。
Javaあばばばばば。
低級言語できません。

github
記事検索
  • ライブドアブログ