Skip to content

Commit c71d7dc

Browse files
committed
[feat] Refine PHPUnit part
1 parent b3dfcd0 commit c71d7dc

File tree

1 file changed

+135
-16
lines changed

1 file changed

+135
-16
lines changed

source/phpkansai/phpunit.rst.txt

Lines changed: 135 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,60 @@ PHPUnitでテストを書こう
88

99
* PHPでテストコードを書くためのライブラリ
1010
* https://phpunit.de/
11-
* デファクトスタンダードの存在があるんですね(Pythonには複数候補があります)
11+
* デファクトスタンダードの存在があるんですね(Pythonには複数候補があります。参考『Python実践レシピ』
1212

13-
インストール
13+
PHPUnitをインストール
14+
============================================================
15+
16+
* Composer
17+
* PHAR
18+
19+
どちらかをやればいいです
20+
21+
Composerでインストール
1422
--------------------------------------------------
1523

16-
* Composerでインストール
24+
* :command:`composer require --dev phpunit/phpunit`
25+
* ちょうぜつ本 など
26+
27+
.. code-block:: txt
28+
29+
.
30+
├── composer.json
31+
├── composer.lock
32+
└── vendor/
33+
└── bin/
34+
└── phpunit
1735
18-
* :command:`composer require --dev phpunit/phpunit`
36+
PHARでインストール
37+
--------------------------------------------------
38+
39+
* PHPUnitのドキュメントで推している
40+
* https://docs.phpunit.de/en/10.5/installation.html#manual-download-of-phar
41+
42+
.. code-block:: txt
43+
44+
.
45+
└── tools/
46+
└── phpunit
47+
48+
Composerではautoload 🏃‍♂️ (skip)
49+
--------------------------------------------------
1950

20-
* ドキュメントは `PHARをダウンロードして、tools下に置く方法推し <https://docs.phpunit.de/en/10.5/installation.html#manual-download-of-phar>`__
51+
.. TODO PSR-4
52+
53+
phpunitコマンドの使い方
54+
--------------------------------------------------
55+
56+
* :command:`vendor/bin/phpunit`
57+
* (PHARを配置した場合 :command:`tools/phpunit`)
58+
59+
.. code-block:: txt
60+
61+
Usage:
62+
phpunit [options] <directory|file> ...
63+
64+
.. ディレクトリやファイルのパスを指定する
2165
2266
PHPUnitで書くテストは **3** ステップ
2367
============================================================
@@ -38,13 +82,21 @@ Step1 ファイル作成
3882
│ └── fizzbuzzTest.php
3983
└── vendor/
4084
41-
PHPUnitは、指定されたディレクトリの :file:`*Test.php` を探す
85+
(Composerでインストールした場合で進めます。PHARでも動作確認しています)
86+
87+
テストを書くファイル
88+
--------------------------------------------------
89+
90+
* :file:`tests` ディレクトリに配置
91+
* ファイル名は :file:`*Test.php`
92+
93+
* ``phpunit`` コマンドにディレクトリのパスが指定されたときに探されるファイル
4294

4395
Step2 クラスを書く
4496
--------------------------------------------------
4597

4698
* PHPUnitが提供する **TestCaseクラスを継承** したクラスを書く
47-
* **名前はTestで終わる**
99+
* クラス名は **\*Test**
48100

49101
.. code-block:: php
50102
@@ -83,6 +135,50 @@ Step3 テストケースとしてメソッドを書く (2/2)
83135
}
84136
}
85137
138+
今回はassertSameが適切。assertEqualsではない
139+
--------------------------------------------------
140+
141+
.. code-block:: php
142+
143+
php > var_dump("1" === "1"); // assertSame
144+
bool(true)
145+
php > var_dump("1" == 1); // assertEquals
146+
bool(true)
147+
php > var_dump("1" === 1); // assertSameなら誤りに気づける
148+
bool(false)
149+
150+
``Test`` Attributeでもよい 🏃‍♂️ (skip)
151+
--------------------------------------------------
152+
153+
https://docs.phpunit.de/en/10.5/attributes.html#appendixes-attributes-test
154+
155+
.. code-block:: php
156+
157+
use PHPUnit\Framework\Attributes\Test;
158+
159+
class FizzbuzzTest extends TestCase
160+
{
161+
// 関数名は3で始められないので、_を付けています(他のやり方もあると思います)
162+
#[Test]
163+
public function _3の倍数のときはFizzを返す(): void
164+
{
165+
}
166+
}
167+
168+
日本語テストメソッド 🏃‍♂️ (skip)
169+
--------------------------------------------------
170+
171+
* IMO:関数名は **日本語を使ってもよい** と思います
172+
* `実践!ユニットテスト入門(PHPカンファレンス2022) <https://speakerdeck.com/panda_program/unit-testing-for-beginners-at-php-conference-japan-2022?slide=41>`__
173+
* `現在時刻が関わるユニットテストから、テスト容易性設計を学ぶ <https://t-wada.hatenablog.jp/entry/design-for-testability#%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88-%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%83%86%E3%82%B9%E3%83%88%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89>`__
174+
175+
🥟PHPUnitで書くテストは3ステップ
176+
============================================================
177+
178+
1. テストコードのファイルを作る(:file:`*Test.php`)
179+
2. クラスを書く(``*Test``)
180+
3. テストケースとしてメソッドを書く(``test*``)
181+
86182
テスト実行
87183
============================================================
88184

@@ -94,20 +190,20 @@ passしたとき
94190

95191
.. code-block:: txt
96192
97-
Runtime: PHP 8.3.1
193+
Runtime: PHP 8.3.2
98194
99195
. 1 / 1 (100%)
100196
101197
Time: 00:00, Memory: 22.77 MB
102198
103199
OK (1 test, 1 assertion)
104200
105-
failしたとき
201+
failしたとき(わざと落とした)
106202
--------------------------------------------------
107203

108204
.. code-block:: txt
109205
110-
Runtime: PHP 8.3.1
206+
Runtime: PHP 8.3.2
111207
112208
F 1 / 1 (100%)
113209
@@ -147,7 +243,7 @@ failしたとき
147243

148244
https://xp123.com/articles/3a-arrange-act-assert/
149245

150-
3Aで見るdoctest
246+
3Aで見るPHPUnit
151247
--------------------------------------------------
152248

153249
1ステップ1行になるように書き直しています
@@ -169,7 +265,7 @@ Arrange
169265
Act
170266
--------------------------------------------------
171267

172-
テスト対象の関数を **実行**
268+
テスト対象を **実行** (呼び出す)
173269

174270
.. literalinclude:: ../../samplecode/phpunit-example/tests/fizzbuzzTest.php
175271
:language: php
@@ -186,12 +282,21 @@ Assert
186282
:lines: 8-17
187283
:emphasize-lines: 7-8
188284

285+
.. 意図を伝えるアサーションを選ぼう
286+
189287
第4のA:Annihilate 🏃‍♂️ (skip)
190288
--------------------------------------------------
191289

192290
* クリーンアップ
193291
* 『`ロバストPython <https://www.oreilly.co.jp/books/9784814400171/>`__』第21章より
194292

293+
🥟テストコードの構成要素:3A
294+
============================================================
295+
296+
* Arrange テストの **準備**
297+
* Act テスト対象の **実行**
298+
* Assert 実行結果と期待値の **検証**
299+
195300
tips✨ **パラメタ化** テスト
196301
============================================================
197302

@@ -224,12 +329,26 @@ tips✨ **パラメタ化** テスト
224329
{
225330
}
226331
227-
PHPUnitでは **Data Provider** を使おう
332+
**テストメソッドに引数** (パラメタ)を渡したい
333+
--------------------------------------------------
334+
335+
.. code-block:: php
336+
337+
class FizzbuzzTest extends TestCase
338+
{
339+
// $numberに3や6を渡せたら
340+
public function test_3の倍数のときはFizzを返す($number): void
341+
{
342+
$this->assertSame(fizzbuzz($number), "Fizz");
343+
}
344+
}
345+
346+
PHPUnitでは **Data Provider** でできます!
228347
--------------------------------------------------
229348

230349
.. literalinclude:: ../../samplecode/phpunit-example/tests/parametrizedTest.php
231350
:language: php
232-
:lines: 6-7,10-22
351+
:lines: 5,7,10-22
233352

234353
Data Provider
235354
--------------------------------------------------
@@ -239,7 +358,7 @@ Data Provider
239358
| A data provider method must be public and static.
240359
| It must return a value that is iterable, either an array or an object that implements the Traversable interface.
241360
242-
Data Provider
361+
Data Providerの例
243362
--------------------------------------------------
244363

245364
.. literalinclude:: ../../samplecode/phpunit-example/tests/parametrizedTest.php
@@ -259,7 +378,7 @@ Data Provider
259378
% tools/phpunit tests/parametrizedTest.php
260379
PHPUnit 10.5.10 by Sebastian Bergmann and contributors.
261380
262-
Runtime: PHP 8.3.1
381+
Runtime: PHP 8.3.2
263382
264383
.. 2 / 2 (100%)
265384

0 commit comments

Comments
 (0)