しずおかオンライン 山下雄大
Introduction
サーバーサイドエンジニア
社会人3年目
言語: PHP、Ruby
Laravelで、業務外の時間で作っている
シャッフルランチに自動テストを追加した
20h/月
2人(フロント1、バックエンド1)
新しい機能の
動作確認がめんどい
すでに動いている
コードをいじりたくない
開発時間が取れなくて
正しい仕様を忘れる
修正コードデプロイの安心感
コア機能の動作確認が不要に
※Ruby → Rspec
テストデータ作成用
<?php
$factory->define(shuffle_lunch\Lunch::class, function (Faker $faker) {
$aggregate_time = date('Y-m-d H:i:s');
$result_time = date('Y-m-d H:i:s', strtotime('+1 hour'));
return [
'name' => $faker->jobTitle.' Lunch',
'description' => $faker->sentence,
'slack_url' => $faker->url,
'aggregate_time' => $aggregate_time,
'result_time' => $result_time,
'is_recurrence' => $faker->boolean,
'interval_type' => $faker->numberBetween(0, 4),
'interval_value' => $faker->numberBetween(1, 4),
'is_deleted' => $faker->boolean,
];
});
public function testGetPublicEvent()
{
// 開催中のイベントデータを作成
$public_event = Factory(Event::class)->create([
'is_deleted' => false
]);
$get_public_event = Event::getPublicEvent($public_event->id);
$this->assertEquals($public_event->id, $get_public_event->id); // 指定したIDのイベント取得される
// 削除済みのイベント作成
$deleted_event = Factory(Event::class)->create([
'is_deleted' => true
]);
$get_deleted_event = Event::getPublicEvent($deleted_event->id);
$this->assertEmpty($get_deleted_event); // 取得結果は0になる。
}
composer exec -v phpunit
実は、まだCIで動かせていない・・・
コアな部分がエラーになっていないか
確認できるだけで、精神的にだいぶ楽
テストコードがあると、
リファクタリングしやすい
テストによって100%バグがないという
状態にはならない
どこまでテストをするのかという
さじ加減が難しい
テストではなく「振る舞い」
テストをなんと呼ぶべきかという
質問の答えは簡単です。
これは関心対象となっている、
次に実装するふるまいを記述した文章です。
孤独な開発こそ、テストコードをお供にすると
コードを書くのが楽しくなるかも?