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.
return (string)$i;
と書けばstringになる。
表示文
var_dumpでcliに文を表示できる。
勉強元
https://online.dhw.co.jp/kuritama/function-tools-be-used-for-debugging-php/
クラスの使い方書き方とphpUnitを使ったテストコードの書き方
<?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;
}
}
}
}
テストコード
<?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