テストコードの書き方について教えてください。
PHPなどでWebアプリの開発を行っていますが、テストコードを書いたことがありません。実際に書こうと思っても何から始めればよいのかがよくわかりません。。。
例えば、以下のような商品を購入する機能を開発する場合に、実際にどのようなテストコードを書けばよいのでしょうか?もっとシンプルな例はたくさんあるとは思うのですが、実装レベルになるとどうすればよいかわからず質問させていただきました。
仕様
1.購入画面
商品の詳細情報が画面に表示されていて購入ボタンと配送先の住所を入力するテキストボックスを表示する
2.購入内容確認画面
購入する商品と1.で入力した配送先の住所を表示する
3.購入完了画面
DBに受注情報を登録して購入完了画面を表示する
プログラムは以下のようなものを想定しています
├── controllers
│ ├── input.php
│ ├── confirm.php
│ └── complete.php
├── views
│ ├── input.html
│ ├── confirm.html
│ └── complete.html
└── models
├── product.php
└── order.php
- 購入画面
controllers/input.php
$id = $_GET["id"]; if (!$id) { // 404エラー } $products = Model_Products::get($id); if (empty($products)) { // 404エラー } // テンプレート表示 $viewData = array("products", $products); viewTemplate("input.html", $viewData);
views/input.html
<!-- 商品情報などを表示 --> <form method="post" action="confirm.php"> <input type="hidden" name="id" value="<?= $products["id"]; ?>" /> 配送先<input type="text" name="address" /> <input type="submit" value="確認" /> </form>
2.購入内容確認画面
controllers/confirm.php
$id = $_POST["id"]; $address = $_POST["address"]; if (!$id) { // 404エラー } if (!$address) { // バリデーションエラー } $products = Model_Products::get($id); if (empty($products)) { // 404エラー } // テンプレート表示 $viewData = array("products", $products); viewTemplate("confirm.html", $viewData);
views/confirm.html
<!-- 商品情報や配送先などを表示 --> <form method="post" action="complete.php"> <input type="hidden" name="id" value="<?= $products["id"]; ?>" /> <input type="hidden" name="address" value="<?= $_POST["address"]; ?>" /> <input type="submit" value="購入" /> </form>
- 購入完了画面
controllers/complete.php
$id = $_POST["id"]; $address = $_POST["address"]; if (!$id || !$adress) { // 404エラー } $products = Model_Products::get($id); if (empty($products)) { // 404エラー } // 受注情報登録処理 Model_Orders::register($products, $address) ・・・
Modelsの実装
models/product.php
Model_Product { public static function get($id) { // productsテーブルへSelect文を実行して結果を返す } }
models/order.php
Model_Order { public static function register($products, $address) { // ordersテーブルへinsert文を実行 } }
あなたの回答
tips
プレビュー