個人開発

自動テスト導入のススメ 

しずおかオンライン 山下雄大

Introduction

サーバーサイドエンジニア

社会人3年目

言語: PHP、Ruby

Today's Topic

Laravelで、業務外の時間で作っている

シャッフルランチに自動テストを追加した

Development 

平均開発工数

20h/月

開発者数

2人(フロント1、バックエンド1)

開発リソースが限りなく少ない

what's problem

新しい機能の

動作確認がめんどい

すでに動いている

コードをいじりたくない

開発時間が取れなくて

正しい仕様を忘れる

Trigger

Rspecによる自動テスト導入

what's merit

修正コードデプロイの安心感

コア機能の動作確認が不要に

シャッフルランチにもテストを導入したら、

開発が楽になりそう!

what did i do ?

①テストフレームワークの導入

※Ruby → Rspec

what did i do ?

②テストデータの作成メソッド

Factory

テストデータ作成用

<?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,
    ];
});

example

開催されているランチの取得メソッドのテスト

 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になる。
 }

what did i do ?

③テスト実行

composer exec -v phpunit

実は、まだCIで動かせていない・・・

impression①

テスト導入をしてみて

コアな部分がエラーになっていないか

確認できるだけで、精神的にだいぶ楽

テストコードがあると、

リファクタリングしやすい

impression②

テスト導入をしてみて

テストによって100%バグがないという

状態にはならない

どこまでテストをするのかという

さじ加減が難しい

tdd to bdd

Beavior driven development

テストではなく「振る舞い」

テストコードでできることは、テストではなくチェック

what's bdd

テストをなんと呼ぶべきかという

質問の答えは簡単です。

これは関心対象となっている、

次に実装するふるまいを記述した文章です。

finally

メソッドは何をするのか?

動作するのか?

もっと良い書き方はないか?

テストコード = プログラムとの相談

孤独な開発こそ、テストコードをお供にすると

コードを書くのが楽しくなるかも?

thank you
for listening

Made with Slides.com