- 2人1組になってプログラムを書く
- 書く人(ドライバー)と、横で考える人(ナビゲーター)は随時入れ替える
- コーディングするときは必ず何を書こうとしているのか喋りながら書く
- 15分の作業が終わる前にgit commitして、速やかに次のペアに席を譲る
- コーディング中のペア以外の人達は以下の様に何でも良いのでその場で口を出して良い。ただし、質問が優先されるべき。
- 技術的な質問(このメソッド何なの?みたいな)
- 書き方の間違いの指摘
- 改善案の提案
- コードの仕様上で気をつけなければならないことの指摘\
などなど...
Coding Dojo Wikiというサイトに載っている、型ボウリングの問題をみんなで解きましょう!
- 1ゲームは、10ターンで、1ターンをフレームと呼ぶ
- 1フレーム中、プレイヤーはすべてのピンを倒すまでに2回投げられる
- 2投で全てのピンを倒せなかった場合は、そのフレームでのプレイヤーのスコアは2投で倒せたピンの合計数
- 2投の試行ですべてのピンを倒した場合は、スペアと呼ばれ、そのフレームでのスコアは、10+プレイヤーの次のターンの最初の1投で倒したピンの数
- フレームの最初の1投で全てのピンを倒した場合はストライクと呼び、そのフレームのスコアは、10+プレイヤーの次の2投で倒したピンの単純な合計数
- プレイヤーは最後の10フレーム目でスペアを取得した場合追加で1回、ストライクを取得した場合は追加で2回投げることが出来、追加で投げる分の得点計算は同じフレーム(10フレーム目)のものとして扱われる
- ゲームのスコアは全てのフレームのスコアの合計
1つの文字が1投の結果を示し、数字を倒したピンの数、"X"をストライク、"/"をスペア、"-"をガーターとする
- "XXXXXXXXXXXX"(12投:12ストライク)= 10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 = 300
- "9-9-9-9-9-9-9-9-9-9-"(20投:9とガーターの10組)= 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 = 90
- "5/5/5/5/5/5/5/5/5/5/5"(21投:5のスペア10フレームと最後の5)= 10 +5 +10 +5 +10 + 5 + 10 +5 +10 +5 +10 +5 +10 +5 +10 +5 +10 +5 +10 +5 = 150
ok $true_or_false;
is $got, $expect;
is_deeply \@got, \@expect;
is_deeply \%got, \%expect;
is_deeply $got, $ARRAYREF;
is_deeply $got, $HASHREF;
この辺りまで使えれば大体おk
use Test::Exception;
dies_ok {....}; # 例外が発生すればテストをパス
lives_ok {....}; # 例外が発生しなければテストをパス
use Test::Warn;
warning_is { ... }, 'warn message';
warning_like { ... }, [qr/warn message/];
Test::MockObjectは便利なのでいろいろ出来る。 ただし、MockObjectによって書き換えたメソッドは、
$mock_objはなんでもないTest::MockObjectのインスタンス
use Test::MockObject;
my $mock_obj = Test::MockObject->new;
$mock_obj->mock(foo => sub { print 'mock foo' });
$mock_obj->foo; # => mock foo
ok $mock_obj->called('foo');
is $mock_obj->next_call, 'foo'; # 呼び出したかどうかのテスト
$mock_objは、Foo::Barクラスになりすましたモックオブジェクト
use Test::MockObject;
my $mock_obj = Test::MockObject->new;
$mock_obj->fake_module('Foo::Bar', new => sub { $mock_obj });
$mock_obj->fake_new('Foo::Bar');
$mock_obj->mock(foo => sub { print 'mock foo'; });
my $foo_bar = Foo::Bar->new;
$foo_bar->foo; # => mock foo
常に同じ値を返す
use Test::MockObject;
my $mock_obj = Test::MockObject->new;
$mock_obj->set_always(foo => 'presto');
$mock_obj->foo; # => presto
$mock_obj->set_true('bar');
$mock_obj->bar; # => 1