SlideShare ist ein Scribd-Unternehmen logo
1 von 9
Downloaden Sie, um offline zu lesen
Testman
2012.11.24 PyFes
Success

                           Fail

rhacoのキャラクターを書いてくれる人を募集するために書いたダサいカエルの絵が会社のJenkinsで
使われています。rhacoのテストはxUnit形式のxmlを出力していなくてjenkinsが使えない。同僚は仕
方なくphpUnitを使おうとしたようですが…
phpUnitが全く気に入らず、結果の保存や、カバレッジ含んだ画面を見られるTestmanを開発してし
まいました。わたしは再度ダサキャラを…。OSSもゆるキャラ時代になるに違いないっす。
• curl -L -O 
    https://github.com/downloads/tokushima/
    testman/testman.php




   http://localhost/testman.php/web/index.php




Testmanはファイル一つ。ブラウザで表示できる。使い方のドキュメントも含んでいる。
• php testman.php -report




xDebugを有効にして、reportオプション付きでテストを実行すれば、カバレッジ確認できる。
• php testman.php -report




詳細でマウスオーバーすれば、どのファイルでカバーされているかもわかる。
test client
       • https://github.com/tokushima/
         testman/blob/master/example/test/
         entry/top.php

     <?php
     eq(1,1);

     $b = b();
     $b->do_get(test_map_url('top','HOGE','AAA'));
     eq('TOP_HOGEAAA',$b->body());




URLの設定から逆引きして決定したURLに対してブラウザの振りをしたクライアントでのテストもでき
る。
doctest
            <?php
            class Sample{
              public function abc($str){
                return '('.$str.')';
                /∗∗∗
                 ∗ $self = new self();
                 ∗ eq("(hoge)",$self->abc("hoge"));
                 ∗/
                /∗∗∗
                  # fuga
                  $self = new self();
                  eq("(fuga)",$self->abc("fuga"));
                 ∗/
              }
              static public function def($str){
                return '('.$str.')';
                /∗∗∗
                  eq("(hoge)",self::def("hoge"));
                 ∗/
              }
              /∗∗∗
                eq("(hoge)",self::def("hoge"));
                $self = new self();
                eq("(fuga)",$self->abc("fuga"));
               ∗/
              
              /∗∗∗
                # __setup__
                eq(true,true);
               ∗/
              /∗∗∗
                # __teardown__
                eq(true,true);
               ∗/
            }



Pythonistaにはおなじみのdoctest。doctestなのにsetupとteardownがある。
https://github.com/tokushima/testman

Weitere ähnliche Inhalte

Was ist angesagt?

traitを使って楽したい話
traitを使って楽したい話traitを使って楽したい話
traitを使って楽したい話infinite_loop
 
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかYuki Miyatake
 
Local php-100828 2
Local php-100828 2Local php-100828 2
Local php-100828 2Akio Ishida
 
effective modern c++ chapeter36
effective modern c++ chapeter36effective modern c++ chapeter36
effective modern c++ chapeter36Tatsuki SHIMIZU
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門kwatch
 
Scalamacrosについて
ScalamacrosについてScalamacrosについて
Scalamacrosについてdekosuke
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法博文 斉藤
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRubyemasaka
 
シェル入門
シェル入門シェル入門
シェル入門ina job
 
Node.js Error & Debug Leveling
Node.js Error & Debug LevelingNode.js Error & Debug Leveling
Node.js Error & Debug Levelingkumatch kumatch
 
「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみようKentaro Matsui
 
Erlangやってみた
ErlangやってみたErlangやってみた
Erlangやってみたina job
 

Was ist angesagt? (20)

大人のお型付け
大人のお型付け大人のお型付け
大人のお型付け
 
traitを使って楽したい話
traitを使って楽したい話traitを使って楽したい話
traitを使って楽したい話
 
Effective modern-c++#9
Effective modern-c++#9Effective modern-c++#9
Effective modern-c++#9
 
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
 
Local php-100828 2
Local php-100828 2Local php-100828 2
Local php-100828 2
 
effective modern c++ chapeter36
effective modern c++ chapeter36effective modern c++ chapeter36
effective modern c++ chapeter36
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
 
Scalamacrosについて
ScalamacrosについてScalamacrosについて
Scalamacrosについて
 
What is Metasepi?
What is Metasepi?What is Metasepi?
What is Metasepi?
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
 
Ll xcode
Ll xcodeLl xcode
Ll xcode
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRuby
 
Mock and patch
Mock and patchMock and patch
Mock and patch
 
シェル入門
シェル入門シェル入門
シェル入門
 
Node.js Error & Debug Leveling
Node.js Error & Debug LevelingNode.js Error & Debug Leveling
Node.js Error & Debug Leveling
 
ALPSチュートリアル(6) Matplotlib入門
ALPSチュートリアル(6) Matplotlib入門ALPSチュートリアル(6) Matplotlib入門
ALPSチュートリアル(6) Matplotlib入門
 
Applicative functor
Applicative functorApplicative functor
Applicative functor
 
Haskell で CLI
Haskell で CLIHaskell で CLI
Haskell で CLI
 
「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう
 
Erlangやってみた
ErlangやってみたErlangやってみた
Erlangやってみた
 

Andere mochten auch

Nuevo profesional del Aprendizaje y Desarrollo personal en RED (eAprendiz)
Nuevo profesional del Aprendizaje y Desarrollo personal en RED (eAprendiz)Nuevo profesional del Aprendizaje y Desarrollo personal en RED (eAprendiz)
Nuevo profesional del Aprendizaje y Desarrollo personal en RED (eAprendiz)erubio
 
Cabelos de Lelê
Cabelos de LelêCabelos de Lelê
Cabelos de LelêMAIEVS2
 
Programa Convenció d'ICV-EUiA_EPM
Programa Convenció d'ICV-EUiA_EPM Programa Convenció d'ICV-EUiA_EPM
Programa Convenció d'ICV-EUiA_EPM Arnau Martí
 
Programação dia 27 28 novembro 2012
Programação dia 27 28 novembro 2012Programação dia 27 28 novembro 2012
Programação dia 27 28 novembro 2012Jefferson Willian
 
Apresentação jbs abril v1
Apresentação  jbs abril v1Apresentação  jbs abril v1
Apresentação jbs abril v1JBS RI
 
Trab nv2 rodolfo e gonzalez
Trab nv2 rodolfo e gonzalezTrab nv2 rodolfo e gonzalez
Trab nv2 rodolfo e gonzalezromeogolf
 
Fechas de abril
Fechas de abrilFechas de abril
Fechas de abrilescuelamdp
 
Apresentação 4T11 teleconferência
Apresentação 4T11 teleconferênciaApresentação 4T11 teleconferência
Apresentação 4T11 teleconferênciaJBS RI
 
Betrekkelijke voornaamwoorden
Betrekkelijke voornaamwoordenBetrekkelijke voornaamwoorden
Betrekkelijke voornaamwoordenAdrienne de Kock
 
Pratica 17 silde share
Pratica 17 silde sharePratica 17 silde share
Pratica 17 silde shareloisjcarlos
 
Caminito De NúMeros
Caminito De NúMerosCaminito De NúMeros
Caminito De NúMerosescuelamdp
 
Muestra de 1ro C
Muestra de 1ro CMuestra de 1ro C
Muestra de 1ro Cescuelamdp
 
Taller de medios digitales clase 2
Taller de medios digitales   clase 2Taller de medios digitales   clase 2
Taller de medios digitales clase 2rjtassi
 
Seguridad exp osiciion
Seguridad exp osiciionSeguridad exp osiciion
Seguridad exp osiciionlizethromerob
 
Ukuran panjang
Ukuran panjangUkuran panjang
Ukuran panjangbhlim313
 
201 Galeria d'imatges Dani Boix
201 Galeria d'imatges Dani Boix201 Galeria d'imatges Dani Boix
201 Galeria d'imatges Dani Boixxshotex
 

Andere mochten auch (20)

Nuevo profesional del Aprendizaje y Desarrollo personal en RED (eAprendiz)
Nuevo profesional del Aprendizaje y Desarrollo personal en RED (eAprendiz)Nuevo profesional del Aprendizaje y Desarrollo personal en RED (eAprendiz)
Nuevo profesional del Aprendizaje y Desarrollo personal en RED (eAprendiz)
 
Cell Phone Evolution
Cell Phone EvolutionCell Phone Evolution
Cell Phone Evolution
 
Week 12 Recap
Week 12 RecapWeek 12 Recap
Week 12 Recap
 
Cabelos de Lelê
Cabelos de LelêCabelos de Lelê
Cabelos de Lelê
 
Panellets
PanelletsPanellets
Panellets
 
Programa Convenció d'ICV-EUiA_EPM
Programa Convenció d'ICV-EUiA_EPM Programa Convenció d'ICV-EUiA_EPM
Programa Convenció d'ICV-EUiA_EPM
 
Programação dia 27 28 novembro 2012
Programação dia 27 28 novembro 2012Programação dia 27 28 novembro 2012
Programação dia 27 28 novembro 2012
 
Apresentação jbs abril v1
Apresentação  jbs abril v1Apresentação  jbs abril v1
Apresentação jbs abril v1
 
Trab nv2 rodolfo e gonzalez
Trab nv2 rodolfo e gonzalezTrab nv2 rodolfo e gonzalez
Trab nv2 rodolfo e gonzalez
 
Fechas de abril
Fechas de abrilFechas de abril
Fechas de abril
 
Apresentação 4T11 teleconferência
Apresentação 4T11 teleconferênciaApresentação 4T11 teleconferência
Apresentação 4T11 teleconferência
 
Betrekkelijke voornaamwoorden
Betrekkelijke voornaamwoordenBetrekkelijke voornaamwoorden
Betrekkelijke voornaamwoorden
 
Pratica 17 silde share
Pratica 17 silde sharePratica 17 silde share
Pratica 17 silde share
 
Caminito De NúMeros
Caminito De NúMerosCaminito De NúMeros
Caminito De NúMeros
 
Muestra de 1ro C
Muestra de 1ro CMuestra de 1ro C
Muestra de 1ro C
 
Taller de medios digitales clase 2
Taller de medios digitales   clase 2Taller de medios digitales   clase 2
Taller de medios digitales clase 2
 
Globalmouth at wednesday relations 20121128
Globalmouth at wednesday relations 20121128Globalmouth at wednesday relations 20121128
Globalmouth at wednesday relations 20121128
 
Seguridad exp osiciion
Seguridad exp osiciionSeguridad exp osiciion
Seguridad exp osiciion
 
Ukuran panjang
Ukuran panjangUkuran panjang
Ukuran panjang
 
201 Galeria d'imatges Dani Boix
201 Galeria d'imatges Dani Boix201 Galeria d'imatges Dani Boix
201 Galeria d'imatges Dani Boix
 

Ähnlich wie Testman

第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」yoshiaki iwanaga
 
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめTypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめYu Nobuoka
 
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-Kazunari Hara
 
ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】株式会社ランチェスター
 
JavaScriptクイックスタート
JavaScriptクイックスタートJavaScriptクイックスタート
JavaScriptクイックスタートShumpei Shiraishi
 
Go と Couchbase で microservices を作るには?
Go と Couchbase で microservices を作るには?Go と Couchbase で microservices を作るには?
Go と Couchbase で microservices を作るには?Yusuke Komatsu
 
TypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューTypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューAkira Inoue
 
Xtend - Javaの未来を今すぐ使う
Xtend - Javaの未来を今すぐ使うXtend - Javaの未来を今すぐ使う
Xtend - Javaの未来を今すぐ使うTatsumi Naganuma
 
JavaのGenericsとは?
JavaのGenericsとは?JavaのGenericsとは?
JavaのGenericsとは?Kenji Nakamura
 
LastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめようLastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめようShinsuke Sugaya
 
TypeScript と Visual Studio Code
TypeScript と Visual Studio CodeTypeScript と Visual Studio Code
TypeScript と Visual Studio CodeAkira Inoue
 
今さら始めるCoffeeScript
今さら始めるCoffeeScript今さら始めるCoffeeScript
今さら始めるCoffeeScriptAshitaba YOSHIOKA
 
JavaScript/CSS 2015 Autumn
JavaScript/CSS 2015 AutumnJavaScript/CSS 2015 Autumn
JavaScript/CSS 2015 AutumnKoji Ishimoto
 
JavaScriptおよびXPages Vote技術解説
JavaScriptおよびXPages Vote技術解説JavaScriptおよびXPages Vote技術解説
JavaScriptおよびXPages Vote技術解説賢次 海老原
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8y_taka_23
 
Xtend30分クッキング やきに駆動
Xtend30分クッキング   やきに駆動Xtend30分クッキング   やきに駆動
Xtend30分クッキング やきに駆動Shinichi Kozake
 
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftSwift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftTomohiro Kumagai
 
Best practice laravel
Best practice laravelBest practice laravel
Best practice laravelRisa Ohnishi
 

Ähnlich wie Testman (20)

第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
 
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめTypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
 
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-
 
ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】
 
JavaScriptクイックスタート
JavaScriptクイックスタートJavaScriptクイックスタート
JavaScriptクイックスタート
 
Go と Couchbase で microservices を作るには?
Go と Couchbase で microservices を作るには?Go と Couchbase で microservices を作るには?
Go と Couchbase で microservices を作るには?
 
TypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューTypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービュー
 
Xtend - Javaの未来を今すぐ使う
Xtend - Javaの未来を今すぐ使うXtend - Javaの未来を今すぐ使う
Xtend - Javaの未来を今すぐ使う
 
JavaのGenericsとは?
JavaのGenericsとは?JavaのGenericsとは?
JavaのGenericsとは?
 
LastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめようLastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめよう
 
TypeScript と Visual Studio Code
TypeScript と Visual Studio CodeTypeScript と Visual Studio Code
TypeScript と Visual Studio Code
 
今さら始めるCoffeeScript
今さら始めるCoffeeScript今さら始めるCoffeeScript
今さら始めるCoffeeScript
 
JavaScript/CSS 2015 Autumn
JavaScript/CSS 2015 AutumnJavaScript/CSS 2015 Autumn
JavaScript/CSS 2015 Autumn
 
JavaScriptおよびXPages Vote技術解説
JavaScriptおよびXPages Vote技術解説JavaScriptおよびXPages Vote技術解説
JavaScriptおよびXPages Vote技術解説
 
Swiftおさらい
SwiftおさらいSwiftおさらい
Swiftおさらい
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
 
Xtend30分クッキング やきに駆動
Xtend30分クッキング   やきに駆動Xtend30分クッキング   やきに駆動
Xtend30分クッキング やきに駆動
 
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftSwift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswift
 
Junit4
Junit4Junit4
Junit4
 
Best practice laravel
Best practice laravelBest practice laravel
Best practice laravel
 

Mehr von makoto tsuyuki

スゴイ django - Python&Djangoで始めるWeb開発 in 札幌 #1
スゴイ django - Python&Djangoで始めるWeb開発 in 札幌 #1スゴイ django - Python&Djangoで始めるWeb開発 in 札幌 #1
スゴイ django - Python&Djangoで始めるWeb開発 in 札幌 #1makoto tsuyuki
 
Erulolo at Kamakurago #1
Erulolo at Kamakurago #1Erulolo at Kamakurago #1
Erulolo at Kamakurago #1makoto tsuyuki
 
Webフレームワークパネル(Django) at PyConJP 2012
Webフレームワークパネル(Django) at PyConJP 2012Webフレームワークパネル(Django) at PyConJP 2012
Webフレームワークパネル(Django) at PyConJP 2012makoto tsuyuki
 
Django - 次の一歩 gumiStudy#3
Django - 次の一歩 gumiStudy#3Django - 次の一歩 gumiStudy#3
Django - 次の一歩 gumiStudy#3makoto tsuyuki
 
引き出しとしてのDjango - SoozyCon7
引き出しとしてのDjango - SoozyCon7引き出しとしてのDjango - SoozyCon7
引き出しとしてのDjango - SoozyCon7makoto tsuyuki
 
Python Workshop the Edge - django
Python Workshop the Edge - djangoPython Workshop the Edge - django
Python Workshop the Edge - djangomakoto tsuyuki
 
伝説のギタリストじゃない方のDjango
伝説のギタリストじゃない方のDjango伝説のギタリストじゃない方のDjango
伝説のギタリストじゃない方のDjangomakoto tsuyuki
 
変態的PHPフレームワーク rhaco
変態的PHPフレームワーク rhaco変態的PHPフレームワーク rhaco
変態的PHPフレームワーク rhacomakoto tsuyuki
 

Mehr von makoto tsuyuki (10)

スゴイ django - Python&Djangoで始めるWeb開発 in 札幌 #1
スゴイ django - Python&Djangoで始めるWeb開発 in 札幌 #1スゴイ django - Python&Djangoで始めるWeb開発 in 札幌 #1
スゴイ django - Python&Djangoで始めるWeb開発 in 札幌 #1
 
Erulolo at Kamakurago #1
Erulolo at Kamakurago #1Erulolo at Kamakurago #1
Erulolo at Kamakurago #1
 
Not free
Not freeNot free
Not free
 
Webフレームワークパネル(Django) at PyConJP 2012
Webフレームワークパネル(Django) at PyConJP 2012Webフレームワークパネル(Django) at PyConJP 2012
Webフレームワークパネル(Django) at PyConJP 2012
 
Django - 次の一歩 gumiStudy#3
Django - 次の一歩 gumiStudy#3Django - 次の一歩 gumiStudy#3
Django - 次の一歩 gumiStudy#3
 
引き出しとしてのDjango - SoozyCon7
引き出しとしてのDjango - SoozyCon7引き出しとしてのDjango - SoozyCon7
引き出しとしてのDjango - SoozyCon7
 
Python Workshop the Edge - django
Python Workshop the Edge - djangoPython Workshop the Edge - django
Python Workshop the Edge - django
 
伝説のギタリストじゃない方のDjango
伝説のギタリストじゃない方のDjango伝説のギタリストじゃない方のDjango
伝説のギタリストじゃない方のDjango
 
変態的PHPフレームワーク rhaco
変態的PHPフレームワーク rhaco変態的PHPフレームワーク rhaco
変態的PHPフレームワーク rhaco
 
継承だろJK
継承だろJK継承だろJK
継承だろJK
 

Kürzlich hochgeladen

ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦Sadao Tokuyama
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)ssuser539845
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfMatsushita Laboratory
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見Shumpei Kishi
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor arts yokohama
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-LoopへTetsuya Nihonmatsu
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~arts yokohama
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdfAyachika Kitazaki
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法ssuser370dd7
 

Kürzlich hochgeladen (12)

ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
 
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
 
2024 03 CTEA
2024 03 CTEA2024 03 CTEA
2024 03 CTEA
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
 
2024 04 minnanoito
2024 04 minnanoito2024 04 minnanoito
2024 04 minnanoito
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
 

Testman

  • 2. Success Fail rhacoのキャラクターを書いてくれる人を募集するために書いたダサいカエルの絵が会社のJenkinsで 使われています。rhacoのテストはxUnit形式のxmlを出力していなくてjenkinsが使えない。同僚は仕 方なくphpUnitを使おうとしたようですが…
  • 4. • curl -L -O https://github.com/downloads/tokushima/ testman/testman.php http://localhost/testman.php/web/index.php Testmanはファイル一つ。ブラウザで表示できる。使い方のドキュメントも含んでいる。
  • 5. • php testman.php -report xDebugを有効にして、reportオプション付きでテストを実行すれば、カバレッジ確認できる。
  • 6. • php testman.php -report 詳細でマウスオーバーすれば、どのファイルでカバーされているかもわかる。
  • 7. test client • https://github.com/tokushima/ testman/blob/master/example/test/ entry/top.php <?php eq(1,1); $b = b(); $b->do_get(test_map_url('top','HOGE','AAA')); eq('TOP_HOGEAAA',$b->body()); URLの設定から逆引きして決定したURLに対してブラウザの振りをしたクライアントでのテストもでき る。
  • 8. doctest <?php class Sample{   public function abc($str){     return '('.$str.')';     /∗∗∗      ∗ $self = new self();      ∗ eq("(hoge)",$self->abc("hoge"));      ∗/     /∗∗∗       # fuga       $self = new self();       eq("(fuga)",$self->abc("fuga"));      ∗/   }   static public function def($str){     return '('.$str.')';     /∗∗∗       eq("(hoge)",self::def("hoge"));      ∗/   }   /∗∗∗     eq("(hoge)",self::def("hoge"));     $self = new self();     eq("(fuga)",$self->abc("fuga"));    ∗/      /∗∗∗     # __setup__     eq(true,true);    ∗/   /∗∗∗     # __teardown__     eq(true,true);    ∗/ } Pythonistaにはおなじみのdoctest。doctestなのにsetupとteardownがある。