テスト駆動開発でルーターを作る Part2
作成日時: | 2020年7月8日 |
更新日時: | 2020年7月8日 |
こんにちは、やみともです。
今回は前回「テスト駆動開発でルーターを作る Part1」の続きです。
前回まででテストメソッドを作り、テストを失敗させるところまで進みました。
今回はまず失敗したテストを通すところから始めます。
なので、Routerクラスを作成しましょう。
[ Router.php ]
もう一度pコマンド(alias p="vendor/bin/phpunit --color tests/" している)でテストを実行すると
エラー内容が変わって「Error: Call to undefined method Router::get()」つまり「Routerクラスにgetスタティックメソッドがない」になりました。
どんどん進めます。
[ Router.php ]
もう一度テストを実行すると
「Error: Call to undefined method Router::routing()」
routingメソッドも無いと言われたので実装します。
ここではとりあえずテストを通すため、以下のように値決め打ちでreturnする。
リファクタリングなどは全てのテストが通った後に、全てのテストが通る状態をキープしながら行うのが良いと思います。
ちなみにこれまでの説明もこれからの説明も下のテスト駆動開発の本を参考にしています。
テスト駆動開発に興味のある方は購入されてはどうでしょうか。
今回は前回「テスト駆動開発でルーターを作る Part1」の続きです。
前回まででテストメソッドを作り、テストを失敗させるところまで進みました。
今回はまず失敗したテストを通すところから始めます。
前回まで
$ p PHPUnit 9.2.5 by Sebastian Bergmann and contributors. E 1 / 1 (100%) Time: 00:00.024, Memory: 4.00 MB There was 1 error: 1) RouterTest::test_routing_index Error: Class 'Router' not found /Users/yuki/testblog/yamitomo_router/tests/RouterTest.php:11 ERRORS! Tests: 1, Assertions: 0, Errors: 1.
実装
まずエラーを直す
エラー内容は「Error: Class 'Router' not found」つまり「Routerクラスがありません」です。なので、Routerクラスを作成しましょう。
[ Router.php ]
<?php
class Router
{
}
もう一度pコマンド(alias p="vendor/bin/phpunit --color tests/" している)でテストを実行すると
$ p PHPUnit 9.2.5 by Sebastian Bergmann and contributors. E 1 / 1 (100%) Time: 00:00.020, Memory: 4.00 MB There was 1 error: 1) RouterTest::test_routing_index Error: Call to undefined method Router::get() /Users/yuki/testblog/yamitomo_router/tests/RouterTest.php:11 ERRORS! Tests: 1, Assertions: 0, Errors: 1.
エラー内容が変わって「Error: Call to undefined method Router::get()」つまり「Routerクラスにgetスタティックメソッドがない」になりました。
どんどん進めます。
[ Router.php ]
<?php
class Router
{
public static function get()
{
}
}
もう一度テストを実行すると
$ p PHPUnit 9.2.5 by Sebastian Bergmann and contributors. E 1 / 1 (100%) Time: 00:00.022, Memory: 4.00 MB There was 1 error: 1) RouterTest::test_routing_index Error: Call to undefined method Router::routing() /Users/yuki/testblog/yamitomo_router/tests/RouterTest.php:12 ERRORS! Tests: 1, Assertions: 0, Errors: 1.
「Error: Call to undefined method Router::routing()」
routingメソッドも無いと言われたので実装します。
ここではとりあえずテストを通すため、以下のように値決め打ちでreturnする。
class Router
{
public static function get()
{
}
public static function routing()
{
return "Index";
}
}
最初のテストが通る
ここまで実装すると、以下のように最初のテストが通ります。$ p PHPUnit 9.2.5 by Sebastian Bergmann and contributors. . 1 / 1 (100%) Time: 00:00.021, Memory: 4.00 MB OK (1 test, 1 assertion)値を決め打ちしたことなど、まだまだプログラムは完成していませんが、まずテストを通すことが重要です。
リファクタリングなどは全てのテストが通った後に、全てのテストが通る状態をキープしながら行うのが良いと思います。
次回予告 & 本紹介
次回以降もルーターライブラリを作っていきます。ちなみにこれまでの説明もこれからの説明も下のテスト駆動開発の本を参考にしています。
テスト駆動開発に興味のある方は購入されてはどうでしょうか。