ラベル junit の投稿を表示しています。 すべての投稿を表示
ラベル junit の投稿を表示しています。 すべての投稿を表示

2013年6月2日日曜日

『JUnit実践入門』写経・実践会 in 横浜 #7 に参加してきました #junitbook

『JUnit実践入門』写経・実践会 in 横浜 #7
http://connpass.com/event/2248/

2013/06/01 『JUnit実践入門』写経・実践会 in 横浜 #7 #junitbook
http://togetter.com/li/511975

はじめに

前回の写経・実践会のレポートはこちら→『JUnit実践入門』写経・実践会 in 横浜 #6 (特別編) に参加してきました #junitbook

今回は、「第14章 コードカバレッジ -テスト網羅率の測定-」、「第15章 継続的テスト -すばやいフィードバックを手に入れる -」が対象ということで、主にカバレッジの負の側面とそれに対してどうしたら良いのかのディスカッションと、githubのようなレポジトリとtravis-ciのようなサービスと連携するハンズオンをやりました。

カバレッジについて

「カバレッジ100%」という呪いは、もしかしたら、開発側より品質管理やマネジメント層の方が、なまじダイレクトな数字が見えてしまうが故に重症なのではないかと思います。他の指標と組み合わせて、現在の状況を判断する材料なのに、「100% = 正義」という目的と手段が摩り替わってしまっているプロジェクトは残念としか言えません。
カバレッジの元になっているテスト自体が間違っていたり、アサーションフリーの様に目的としているアサーションがなかったり、そもそも顧客が欲しいものが出来ていない時点で例えカバレッジ100%だったとしても、なんの意味もありません。
そういった内容が14.4に書かれていたので、このJUnit実践入門を他の人に勧めるのには、この第14章はいい材料になると思います。

travis-ci & Drone.io

@sue445さんによるGithubにあるリポジトリをTravis CI連携する手順 #junitbookのハンズオンを聞いた後、以前#tokyomercurialで教えていただいたdrone.ioを紹介しました。

drone.ioは、github以外にbitbucketが使えますし、設定も
Quickstartの手順に沿って設定するだけで使えるようになります。
特にdrone.ioは、mercurialで連携できるサービスとして数少ない一つなので、ありがたいと思います。

おわりに

残りの章もだいぶ少なくなりました。
最後までやりきりたいと思います。

主催の@shinyaa31さん、参加者の皆さん、会場の横浜タネマキさん、ありがとうございました。
次回もよろしくお願いします。

2013年5月20日月曜日

『JUnit実践入門』写経・実践会 in 横浜 #6 (特別編) に参加してきました #junitbook

『JUnit実践入門』写経・実践会 in 横浜 #6 (特別編)
http://connpass.com/event/2270/

2013/05/12 『JUnit実践入門』写経・実践会 in 横浜 #6 (特別編) #junitbook
http://togetter.com/li/490112

はじめに

前回の写経・実践会のレポートはこちら→『JUnit実践入門』写経・実践会 in 横浜 #5 に参加してきました #junitbook
今回は、@irofさんの「テスト駆動開発を継続する」と、著者の@shuji_w6eさんのJUnit実践入門には含まれなかった幻の章についての講演とハンズオンでした。

テスト駆動開発を継続する



テストの価値は失敗することにあるというのは、現在の状況と目的が一致している状態から変化があったことを分かりやすくしたものだと思いました。
アサーションを分かりやすく一つづつ実施することで、どの状態が意図している目的で、どうして目的に合致しなかったのか見つけやすくなるのかなと思います。
大きなオブジェクトの状態を確認しようとするとアサーションの行が増えますし、本当に確認したいことが埋もれてしまっては、元も子もないと思います。
設計を見なおしたり、リファクタリングをする際に、目的の状態になっていることを確認するためのテストを書き、その状態を維持しつつ小さく分かりやすいテストにしていくことが重要なことだと感じました。
そういった小さいテストを継続的に積み上げることで、ひとつの変更が影響する範囲を視覚的に捉えることが可能になるのではないかなと、思います。
小さいテストであれば、わざと目的通りのRedにした場合でも、意図している動作であるか確認しやすいのではと思いました。

ハンズオン

後半は、@shuji_w6eさんの「受け入れテストの自動化とユースケース駆動開発 -Pre Cucumber Boot Camp-」と「cucumber + selenium」による受け入れテストのハンズオンでした。

元々はmavenとeclipseを対象にしたプロジェクトでしたが、IntelliJ IDEAとGradleでやってみようと思い、前日にGradle 1.6のBuild Setup Pluginを利用してbuild.gradleを作っておきました。



無事、IntelliJ IDEAでもcucumberを使えるようになりました。
また、h2databaseやjettyについてもtaskを追加しておいたお陰で、コマンドを実行するだけで起動や初期化が出来るようになりました。

途中でフィーチャファイルの補完が効いてないのかなと思いました。

が、IntelliJ IDEAを12.1.2から12.1.3に上げて見たところ、シンタックスハイライトとコードジャンプも出来るようになりました。
さすがJetBrains様です。

なんとか、ハンズオンの進行に付いていくことが出来ましたし、seleniumの残念な箇所も体験することが出来ました。
前回のBDDにてイマイチ使い所が分からなかったcucumberも、seleniumと組み合わせることでどうやって使ったら良いのか体験することが出来たのは良かったと思いました。

おわりに

懇親会では、@enumさんも参加して下さり、とても楽しい充実した時間でした。

今回のハンズオンは、プレと冠していましたがとても実践的でスタートラインまで連れて行ってもらえる内容でした。
今後は、どうやってシナリオを書いて行ったら良いのかなど、教えていただいた書籍を参考にやってみようと思います。

また、GroovyではGebがあるので、これとSpockを組み合わせることで、seleniumの残念な箇所をカバーしてくれて、なおかつシナリオもコードで書けるようになるので、同じ課題を挑戦してみたいと思います。

講師の@irofさん、著者の@shuji_w6eさん、主催の@shinyaa31さん、参加者の皆さん、会場の横浜タネマキさん、ありがとうございました。

残りの章も少なくなって来ましたが、次回もよろしくお願いします。

2013年3月3日日曜日

『JUnit実践入門』写経・実践会 in 横浜 #4 に参加してきました #junitbook

『JUnit実践入門』写経・実践会 in 横浜 #4 - DBTest Boot&Boost Camp? -
http://connpass.com/event/1694/

2013/03/03 『JUnit実践入門』写経・実践会 in 横浜 #4 #junitbook
http://togetter.com/li/463129

はじめに

前回の写経・実践会のレポートはこちら→ 『JUnit実践入門』写経・実践会 in 横浜 #3 に参加して来ました。 #junitbook

今回は、「第12章 データベースのテスト」が範囲でした。
主にH2Database + DBUnitの使い方を知る内容でした。

データベースのテスト

個人的には、DBUnitを使うのもいいのですが、Groovyでテストを書くとあまりDBUnitに依存しなくても出来てしまうので、Groovyをおすすめします。
DBと連携したテストを行う際に一番のネックとなるのはテストデータの準備だと思われます。
RDBMSであれば、xls、csvあたりが一般的だと思いますが、ORMを使うのがほとんどだと思われますのでそうなってくるとオブジェクトの構造を用意できるようなフォーマットのファイルが必要になってくると思います。
今回は、YAML形式のファイルを読み込んでDBUnitと似たようなことが出来ることをテーマとして取り組んでみました。

テストクラスはこのような感じ→こちら

SnakeYamlとGroovyは、相性がいいため記述量が少なく、さらにGroovyが用意するSQL周りのクラスと組み合わせることで、データの登録も簡単です。

この他にもDBのマイグレーションはどのようなツールを使ったら良いかや、Rails、RSpecのコードを見たりして学ぶことが出来たので、とても勉強になりました。

おわりに

JUnit実践入門に載っていることは、本当に入門なので、この先に待ち受けているDBとの連携周りのテストのような現実とどう向き合っていけばいいのかは、「レガシーコード改善ガイド」や「データベース・リファクタリング」といった本を片手に勉強していくことになると思います。

主催の@shinyaa31さん、参加者の皆様、横浜タネマキさんありがとうございました。
次回もよろしくお願いします。

2013年2月4日月曜日

『JUnit実践入門』写経・実践会 in 横浜 #3 に参加して来ました。 #junitbook

『JUnit実践入門』写経・実践会 in 横浜 #3
http://connpass.com/event/1668/

2013/02/02 『JUnit実践入門』写経・実践会 in 横浜 #3 #junitbook
http://togetter.com/li/448707

はじめに

前回の写経・実践会のレポートはこちら→『JUnit実践入門』写経・実践会 in 横浜 #2 に参加してきました #junitbook

今回は「Part.3 ユニットテストの活用と実践 第11章 テストダブル」が対象でした。
範囲はそんなに広くなかったので、写経は早めに終えることが出来ました。
なので、Groovyで書いた場合を試してみました。

レポジトリはこちら→https://github.com/grimrose/junit-boost-camp

一つどうも動かない箇所がありました。



デバッガーで見てみた時


GroovyのmetaClassを使ってみたコードはこちら


どうも、Interceptしてないみたいです。

次のDelegateObjectSampleTestでは、エラーにならなかったので、多分そうかと。


余裕があるときにもう少し突っ込んでみたいと思います。

リファクタリング

ディスカッションの際、privateメソッドをテストするかという質問が挙がったのですが、
突如参加してくださった@t_wadaさんのお陰で、納得することが出来ました。
個人的には、privateメソッドの処理を別のclass(大抵パッケージプライベートのstatic class)として切り出して、
Quick JUnitでテストクラスを作成します。

そうすれば、黒魔術を使うこと無く呼び出し元のメソッドをテストすることが出来ます。
オブジェクト指向養成ギブスとは違う異質な縛りがあるようなプロジェクトもあるそうなのですが、そんなピヨピヨなプロジェクトでも、自動テストと責務に応じたリファクタリングを行うことで、適切に対応できると思います。

モック、スタブ、スパイ

以前にServletRequestに依存したオブジェクトを利用したクラスのテストを実施するためにjmockitを利用したことがありました。
その時は、他のモックライブラリに比べて色々出来るのでいいのかなと思っていましたが、
今回@t_wadaさんのお話を聴いてやりすぎると痛い目に合うということと、それを経験して戻ってくるのがいいのを教えて頂きました。

他のモックライブラリでは日本語の情報がなかなかなかったのですが、今回、この本が出たお陰でプロジェクトに導入するきっかけになるのではないかと思います。

おわりに

今回は、@t_wadaさんのお陰でモックを利用したテストに対してモヤモヤしていた箇所が少しづつ晴れてきたように感じました。
それに、監訳された「SQLアンチパターン」にサインを頂くことも出来ました。

主催の@shinyaa31さん、突然の参加で講師役?までされた@t_wadaさん、参加者の皆様、横浜タネマキさんありがとうございました。
次回もよろしくお願いします。

2013年1月14日月曜日

『JUnit実践入門』写経・実践会 in 横浜 #2 に参加してきました #junitbook

『JUnit実践入門』写経・実践会 in 横浜 #2
http://connpass.com/event/1557/

2013/01/12 『JUnit実践入門』写経・実践会 in 横浜 #2 #junitbook
http://togetter.com/li/437795

はじめに

前回の写経・実践会のレポートはこちら→『JUnit実践入門』写経・実践会 in 横浜 #1 に参加してきました。 #junitbook

前回に引き続き参加して来ました。
今回は、「Part.2 JUnitの機能と拡張」が対象でした。
初めの方の参加条件として写経のレポジトリを登録するというのがあったので、
年末にやってみましたが第8章までしか出来ませんでした。
出来れば全てこなしたかったので、残念です。

写経のレポジトリはこちら→https://github.com/grimrose/junit-boost-camp

JUnit Boost Camp

第6章のディスカッションの時にうまく説明出来なかったので、この場を借りて言いたかった事を説明してみます。

対象のクラスのメソッドに対するテストと対象のクラスの状態をテストするためのテストが混ざっているような場合があると思います。
そんな場合@Enclosedを使うことで、テストを構造化出来るようになりました。
static classにすることで、明示的にお互いに依存しないように記述出来るようになります。
例えば、JUnit4.xの形式で書かれていたテストを構造化するのであれば、以下のような手順で出来ます。
  • 「@RunWith(Enclosed.class)」を追加する。(import句も)
  • 「public static class コンテキストの名称など {}」を追加する。
  • 内容をそのままstatic classに移動する。
このように新しいstatic classを作ってテストを追加することで、今までのテストも構造化することが出来ます。
新しいフィクスチャが必要になった場合も、新しいメソッドに対してテストを追加する場合も、必要に応じて追加することが出来ます。

JUnit3.xの場合は、TestCaseを継承しただけのテストであれば、setUpとtearDownなどをそれぞれ修正することで対応出来ますが、TestCaseを継承したテスト用の基底クラスを使っている場合は、いろいろと対応しなければならないことが多いので、優先順位とコストなどで判断してください。

もくもくと

後半はGroovyで書かれたテストにJUnitとSpockが同居することが出来るのか試してみました。
参考にさせて頂いたのは、@irofさんのこちらの記事です。→GroovyでJUnitなテストを書くときの注意点……なんて無かった #gadvent2012
同居させるために、Spockのversionを0.6から1.0へ上げました。
0.6では出来ないということに気づいたのは終盤だったので、ちょっと勿体無かったです。

おわりに

今回は、対象範囲が広かった為か終盤はスタミナ切れしてました。
次回は、適度につまめるような何かしらスイーツを用意して見たいと思います。

一番の収穫としては現場でも使えそうな@Ruleや@RunWith(Categories.class)を知ることが出来たので、活かして行きたいと思います。

主催の@shinyaa31さん、参加者の皆様、横浜タネマキさんありがとうございました。
次回もよろしくお願いします。

2012年12月1日土曜日

『JUnit実践入門』写経・実践会 in 横浜 #1 に参加してきました。 #junitbook

『JUnit実践入門』写経・実践会 in 横浜 #1
http://connpass.com/event/1487/

『JUnit実践入門』写経・実践会 in 横浜 #1 #junitbook
http://togetter.com/li/415943


はじめに

Cucumberハンズオン際に@shinyaa31さんがJUnit実践入門読書会を受けての開催したいといったことをおっしゃっていたので、
こういうのあったらいいよねとか、こういうのやると面白そうだよとか、いろいろ意見を出してみました。
初回ということで人数や需要も読めない中、無事開催することが出来ました。

いざ実践

条件にTDDBCに参加された方にしたためか、環境設定などほぼ済んだ状態で進めることが出来たのは良かったと思います。
16章から始めてみましたが、TDDBCではあまり触れられていなかった箇所を見ることでいい準備運動になったと思います。
3章までは、Introductionの箇所なので疑問に思ったことだったりしたことを、議論してました。

以下の本の話が出てました。TDDBCに参加された方々だったので自然かもしれませんね。

XUnit Test Patterns
http://xunitpatterns.com/

Growing Object-Oriented Software Guided by Tests
http://www.growing-object-oriented-software.com/

帰ってから気づいたのですが、xUnitの日本語関連のサイトということとなるとコチラを忘れてはならないと思います。

ぺけま
http://devtesting.jp/pekema/


終盤に、突如@kyon_mmさんが来襲されて、いろいろと3章までの内容について話してくださいました。
生業としている方の話が聞けるのはとても勉強になりました。

次回から本格的にJUnitに触れていきますが、個人的には特にルールについて知っていると得するような項目が並んでいるので楽しみです。

おわりに

今後もこの会を続けて行くにあたって、なかなか読んだだけでは分からないところも、
実際に書くことで実感したり、疑問をお互いに解決していけるようなそんな会になればいいなと思います。

@shinyaa31さん、参加された方々、@kyon_mmさんありがとうございました。

2012年11月25日日曜日

横浜道場 特別編 Cucumber HandsOn !! に参加してきました #agilesamurai #横浜道場

横浜道場 特別編 Cucumber HandsOn !!
http://yokohama-dojo.doorkeeper.jp/events/1990

#横浜道場 特別編 Cucumber HandsOn !!
https://yukar.in/note/ckFj9t

はじめに

横浜道場の特別編として「Cucumber HandsOn !!」が行われることになりました。
cucumberにまつわる講義とその後の実践としてRubyとJavaに別れてハンズオンが行われました。

ハンズオン

当初cucumberは名前と概要だけ知っていた状態だったので、使っている人の話が聞ければいいな程度だったのですが、
その後「WEB+DB vol.69」に@shuji_w6eさんが執筆された「JUnit実践入門」にてcucumber-junitのライブラリによってJavaでも出来ることを知りました。
Javaではcucumberの文化が無いので、体験できればと思いました。

タイミングのいいことに開催前日に「JUnit実践入門」の書籍が発売されました。
当日は雑誌と書籍を見て、予め用意してもらったスケルトンと正解を利用しました。
途中つまづきながらも動かせるようになったので、何とかなったのかなと思います。

自然言語を使うことのメリットとデメリットがよく分かったハンズオンでした。

GroovyでもSpockを使うことで同様のことが出来るので、JUnit以外を利用可能な環境であればSpockを使って、JUnitに縛られているような環境では、cucumber-junitを使うことで似たようなことが出来るのではないかなと思いました。

おわりに

次回は横浜道場の忘年会とのことです。
一応、人生初LTをする予定なので鋭意考察中です。

講師の橋立さん、大中さん、吉田さん、横浜道場のスタッフの皆様、会場を提供して下さった株式会社アットウェア様ありがとうございました。