質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHPUnit

PHPUnitは、PHP向けのユニット・テスト向けフレームワークで、手動では手間のかかるテスト作業を自動化し、繰り返し実行することが可能です。

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

Q&A

解決済

2回答

3739閲覧

Fuelphpでのユニットテスト

aratan

総合スコア36

PHPUnit

PHPUnitは、PHP向けのユニット・テスト向けフレームワークで、手動では手間のかかるテスト作業を自動化し、繰り返し実行することが可能です。

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

0グッド

0クリップ

投稿2016/12/08 02:10

編集2016/12/08 03:02

PHPのFuelphpを使っているプロジェクトが進行中です。
プロジェクトがリリースされてバグの修正や機能追加を行っていく中で
1つ修正すると、違うところでバグが発生するという状況です。

そこでユニットテストのコードを書こうと思うのですが、
テストコードを書いたことが無く、どのようなテストコードを書けば有効なテストコードになるのか
いまいち理解できておりません。

fuelphpのclassesのcontrollerやmodel、のメソッドに対して
1つずつ何を書くというイメージでしょうか?

何かとっかかりになるヒントを与えて頂けませんでしょうか。
よろしくお願いいたします。

・バージョンはこちらです。
PHP5.4
FuelPHP1.7

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

himakuma

2016/12/08 02:26

FuelPHPのバージョンはなんですか?
aratan

2016/12/08 03:03

ありがとうございます、バージョンを追記致しました。
guest

回答2

0

ベストアンサー

テスト方法はm6uさんのサイトを参考にするのが良いと思います。

ユニットテストは手で行うテストを単純にコードで書き、それ以降自動で実行できるというものです。
なので、手で行うテストのリクエスト情報をロジックで書くことになります。
※これが結構大変

ユニットテストは作成するのに、通常のテストの倍ぐらいの工数が掛かります。
テスト用のロジック自体があっているかの検証が必要になるからです。
その辺は問題ないのでしょうか?

1つ修正すると、違うところでバグが発生するという状況です。

デグレのことを言っているのであれば、影響調査に時間を割く方が工数は掛からないと思います。

結構勘違いしている人がいるのですが、ユニットテストの導入時の初期工数はかなりでかいです。
※再テストの工数はかなり減りますが、仕様変更があった場合、対象のテストロジックも全て変更になることに注意して下さい。(ユニットテスト用のコードメンテナンスの工数が余計に掛かる)

少し長くなったので追記:
個人的な意見になってしまうのですが、

ユニットテストは仕様のテストではなく、プログラムが想定する結果を返却するかの観点で行います。
※同じように思えますが、全てのクラスが期待通りの結果を返却をしたら、仕様が満たされるって感じです。

なので、ユニットテストの単位はクラス単位に行います。(機能単位ではありません)
導入になれる為にも、軽い共通のクラスから行うのが良いと思います。(引数が少なくて、結果が分かりやすいもの)
次にその他のmodelクラスですね。(FuelPHPで自動生成されているものは除外)
次に拡張しているCore系をやって行く感じが良いかと。。(テスト観点とかが難しい)

自分の場合、controllerには導入しないですね、
結局画面からのリクエストが正しいかなどで、画面を動かすことになるので。。。(二度手間)

model内で直接リクエスト情報を取ってたりしたら、そのクラスについては導入はあきらめた方が良いと思います。
(modelが画面に依存している状態だから、controllerと同じ状態※FuelPHP本来の考え方ならありえないはずです、、、)

投稿2016/12/08 05:13

編集2016/12/08 06:01
himakuma

総合スコア952

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

himakuma

2016/12/08 05:19

自分が行ってきたプロジェクトでは、共通のロジック部分にだけユニットテストを行っていました
退会済みユーザー

退会済みユーザー

2016/12/08 05:23

コーディングしながらユニットテスト向けコードも揃えていくようでないとテストが回らなそうだなって察しました。。
himakuma

2016/12/08 05:28

テストが楽になるはずだから、ユニットテストしよう!!見たいな軽いのりでやると地獄を見ますね。結構そういうプロジェクト多いですけど。。。
aratan

2016/12/08 05:31

ありがとうございます。テスト自体の検証や、仕様変更時のテストロジック変更も踏まえると、うまくやらないともっとカオスになるかもしれないということですね。 テストを書けば今よりシステムが安定するかと思っていたんですが・・・・難しそうです。 ちなみに既存のFuelPHPのシステムに導入していくとなると、どこから手をつけるのがいいのでしょうか?
aratan

2016/12/08 08:11

ありがとうございます。全体クラスとモデルから手をつけていこうとおもいます。
guest

0

FuelPHPでのユニットテストと言えばPHPUnitとの組み合わせが一般的なようです。

fuelPHPでPHPUnitを使ったユニット・コントローラーテストをするには - Qiita
http://qiita.com/masahikoofjoyto/items/206e6f8d5b0aa7126678
ComposerでPHPUnitをインストールし、FuelPHPでユニットテストを行う - Qiita
http://qiita.com/uchiko/items/b62eafc18519a5970046
3分でできる FuelPHP 1.6 テスト環境 - A Day in Serenity @ kenjis
http://d.hatena.ne.jp/Kenji_s/20130214/fuelphp_test_env

私もちゃんと取り組んだことがないのですが、事例を真似してやってみるしかないでしょうね。

投稿2016/12/08 03:47

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aratan

2016/12/08 04:51 編集

ありがとうございます。テストのやり方はわかるのですが、 どのような事をテストすれば効果的なのかというのが理解できてないのかもしれません。 これは経験を積むしかなさそうでしょうか。
退会済みユーザー

退会済みユーザー

2016/12/08 04:55

仕様通り作られているかの確認でしかないため、取りうる数字の範囲の上下限を攻めるとか、文字列の長さや文字種の対応の確認とか、ユニークキーが適切に働いているか、など簡単に思いつく想定外の動作をさせてみて適切にエラーとして弾くかどうかが肝だと思います。
aratan

2016/12/08 08:10

ありがとうございます。それが積み重なるとだんだんとシステムが安定していくということですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問