3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【テストおじさんへの道】テストをやると幸せになれる

Posted at

#what this is?
これは僕がテストおじさんになるまでの軌跡を書いた記事です。
この記事を社内で共有してテストの文化を浸透させるために書いています。
執筆当時はまだ「テスト赤ちゃん」です。優しく指摘してください。

#テストをなぜ行う?
答えは簡単です。
「人間は愚かで、プログラムを操ることは難しいから」
です。

最近では「誰でもプログラマーになれる!」なんて、さもプログラマーの敷居が低いかのような言葉がインターネッツで飛び交っていますが
甘いです。
プログラムは簡単に壊れます。そして人に牙をむきます。
そんな事が当たり前の職業でどうやってプログラムを正常にコントロールするのか…
それが「テスト」です。

##テストを書かないとどうなるのか
いくつかあります。
・品質が保証されない
・デバッグのコストが莫大になる
・改修のコストとリスクが莫大になる
・引き継ぎがのリスクが高くなる
などなど…

僕が一番推したいのは
「不安で寝れない」
ということです。
いつ、どこで、どんなときにバグが起こるか、書いた本人ですらわからないのです。
そんな不安をテストは解消してくれます。

##テストを書くとどうなるのか
もうメリットがたくさんです。
・品質が保証されているので、安心して運用出来る。
・デバッグのコストが一気に下がる。手動でのフォームテストなどをしなくてもよくなる。
・改修が簡単になる。どこに副作用があるのか簡単に把握出来る。
・引き継ぎが楽になる。とりあえずテストを読めば使用がふんわりわかる。

様々な恩恵を受けることができますが、一つだけデメリットがあります。
それは
「開発コストが上がる」
ということです。
当然今までの開発にプラスしてテストも書くわけですから、仕方ありません。
ですがメリットを考えるとプラマイゼロ、むしろメリットのほうが大きいと思います。

#テストをするにはどうする?
僕は主にphpを使うので、テストではphpunitを利用します。
他の言語ではjsunitやrubyunitなど、○○unitでググればなんか出ると思います。

そんなphpunitですが、みんな使っているLaravelに基本搭載されています。
vendor\phpunit\phpunit\phpunitにバイナリデータがあります。コレが正体です。
ですが、結構奥のディレクトリに眠っているので
普段はvendor\phpunit\bin\phpunitというシンボリックリンクがあるので、それを叩きます。

コマンドで
sudo php ./vendor/bin/phpunit
と打つと

PHPUnit 8.4.2 by Sebastian Bergmann and contributors.

と表示されてテストが走ります。

#テストを書くにはどうする?
テストはLaravelのtests\Featureの中に置きます。
デフォルトで入っているExampleTest.phpには以下のように書かれています。


<?php

namespace Tests\Feature;

use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;

class ExampleTest extends TestCase
{
    /**
     * A basic test example.
     *
     * @return void
     */
    public function testBasicTest()
    {
        $response = $this->get('/');

        $response->assertStatus(200);
    }
}

基本的に書き方としては
・test○○○というpublic functionを書く
・$this->get('○○○')でレスポンスを得る
・aeert○○○()でテストする
です。

###test○○○というpublic functionを書く
基本的にクラスの上から下へ実行されます。
関数名はtestというプレフィックスを付けなければ自動で実行されません。

###$this->get('○○○')でレスポンスを得る
getの他にもpostやputなどがあります。

###aeert○○○()でテストする
assert○○○()をアサーションといいます。
assertStatus()やassertSee()などたくさんあります。
このアサーションを組み合わせてプログラムをテストします。

アサーションには、phpunitが用意しているものと
https://phpunit.readthedocs.io/ja/latest/assertions.html

Laravelのヘルパとして用意されているものがあります。
https://readouble.com/laravel/5.7/ja/http-tests.html

#まずは書いてみよう
簡単なものを書いてみて動きを自分で確認するのがテストへの第一歩だと思います。
とりあえず触ってみましょう、テストの素晴らしさがわかると思います。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?