LoginSignup
0

More than 1 year has passed since last update.

PHP今日知ったこと

Last updated at Posted at 2022-05-17

DockerDesktop

DockerDesktopをインストールした.
wsl(Windows SubSystem for Linux)でやれとのことだった。PCにはUbutuを入れていて、Ubuntuはwslなのでいけると思ったが、ubuntuのバージョンが1で、1だとDockerDesktopが動かないらしくてバージョンを2に上げた。
Dockerはイメージからコンテナを構成するらしい。
そしてDockerDesktopはコンテナ、Image、Volume(記憶領域のことらしい)の削除とかはguiでできるらしいが、コンテナの中身はCLIで確認操作する。(のであまり意味を感じなかった。)

docker内にphpUnitをインストールした。

型変換

strじゃなくてstring.

cast.php
return (string)$i;

と書けばstringになる。

表示文

var_dumpでcliに文を表示できる。
勉強元
https://online.dhw.co.jp/kuritama/function-tools-be-used-for-debugging-php/

クラスの使い方書き方とphpUnitを使ったテストコードの書き方

FizzBuzz.php
<?php
  
declare(strict_types=1);

namespace Root\App;

class FizzBuzz
{
    static function fizzBuzz(int $i): string
    {
        if ( $i <= 0 )
        {
            //例外
            return "例外";
        }
        else
        {
            if ( $i % 3 === 0 and $i % 5 !== 0)
            {
                return "Fizz";
            }
            elseif ( $i % 5 === 0 and $i % 3 !== 0)
            {
                return "Buzz";
            }
            elseif ( $i % 5 === 0 and $i % 3 === 0)
            {
                return "FizzBuzz";
            }
            else
            {
                return (string)$i;
            }
        }
    }
}

テストコード

FizzBuzzTest.php
<?php
  
declare(strict_types=1);
  
use PHPUnit\Framework\TestCase;
use Root\App\FizzBuzz;

use function PHPUnit\Framework\assertSame;

final class FizzBuzzTest extends TestCase
{
    protected FizzBuzz $fizzBuzz;

    protected function setUp() :void
    {
        $this->fizzBuzz = new FizzBuzz();
    }

    /**
     * @test
     */
    public function _1のと時にstringの1を返す(): void
    {
        assertSame("1",$this->fizzBuzz->fizzBuzz(1));
    }
    /**
     * @test
     */
    public function _3の倍数の時にFizzを返す(): void
    {
        assertSame("Fizz",$this->fizzBuzz->fizzBuzz(3));
    }
    /**
     * @test
     */
    public function _5の倍数の時にBuzzを返す(): void
    {
        assertSame("Buzz",$this->fizzBuzz->fizzBuzz(5));
    }
    /**
     * @test
     */
    public function _15の倍数の時にFizzBuzzを返す(): void
    {
        assertSame("FizzBuzz",$this->fizzBuzz->fizzBuzz(15));
    }
    /**
     * @test
     */
    public function _0以下の時に例外と出す(): void
    {
        assertSame("0以下は例外処理になります",$this->fizzBuzz->fizzBuzz(0));
    }
}


まずどちらのコードにも一番上にあるdeclare(=宣言(日本語))については
https://qiita.com/Hiraku/items/734f0666ab3d34c52efa
これを見た。

クラスの使い方とphpUnitの使い方で参考にしたのは
https://phpunit.readthedocs.io/ja/latest/writing-tests-for-phpunit.html
https://tech-blog.rakus.co.jp/entry/20210827/phpunit
https://atmarkit.itmedia.co.jp/ait/articles/1506/03/news019.html

とりあえずテストしたいクラスAに対して、テスコトードはATestと名前を付けるのがphpUnitのルールらしい。
なのでFizzBuzzに対してFizzBuzzTest。

そしてFizzBuzzTestの中身をだが、FizzBuzzを呼んできてインスタンスを作らないと動かない。
prtect云々のところがinstanceを作るところだけどunityと一緒だ。

そして/**
* @test
*
というアノテーションはただのコメントアウトではなくて、「その下の関数はテストで自動的に呼ばれるところだよ」という目印であり、すごいことに関数名は日本語でも動くとのこと。
アノテーションさえつければ関数名はなんでもよいとのこと。
assertSameの中身は左が期待する値で、右がテストしたい関数じゃないとだめ。もし逆にするとCLIの表示が逆になってテストが謎になる。
assertなんたらについては
https://qiita.com/rev84/items/12fbd16d210d6a86eff9
を見た。

その他

$argvはCLIで使う。CLIで入力された値を全部格納しておく感じの配列。PHPに標準搭載されてるから宣言なしで使える。

例外処理でthrow new Exception とtry catch文
trycatchの参考
https://qiita.com/Chelsea/items/59436cfda149a6ac6c91
テストでの書き方の参考
https://phpunit.readthedocs.io/ja/latest/writing-tests-for-phpunit.html#writing-tests-for-phpunit-exceptions

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
0