2009-04-29 6 views
5

私はPHP/MySQLプロジェクトの単体テストを書くことを考えてきました。PHPのユニットテストですか?

バグは、フォームの検証、Ajaxの機能、UIの機能(リンクのクリックなど)をテストする方法です。また、テストがUIの1つの側面に依存しないようにするため、リンクを1つ移動するとすべてのテストが中断します。

ユニットテストに必要なコードの部分、ユニットテストに費やす時間の長さ、その他のヒント/ヒントは、誰にもありますか?

+1

http://stackoverflow.com/questions/570451/how-to-best-do-unit-testing-for-a-web-application –

答えて

2

ユニットテストは、少なくともWebアプリケーション開発の観点からは、実際にUI設計をカバーすることはできません。どのような単位テストは、の助けを借りて、すべてのコントローラメソッドや、あなたがぶら下がっているシングルトン/グローバル関数の入出力をテストするのに役立ちます。したがって、フォームの検証で単体テストカバレッジを取得する場合は、アプリケーションがUIとは独立した検証関数をテストできるように構造化されていることを確認してください。

class SomeController extends ... { 
    ... function isAPhoneNumber($string){ 
     if(...) { 
      return true; 
     } 
     else (...) { 
      return false; 
     } 
    } 
} 

これは、このメソッドに値を渡すすべてのコードをテストしないままにします。私がこれをテストするのを見た唯一の効果的な方法は、SeleniumのようなブラウザのリモートコントロールでUIを直接テストすることです。 PHPUnit testing frameworkには、SeleniumのPHPドライバを使用するためのフックがあります。これは、他の単体テストと同じテストランナーを使用できることを意味します。

あなたは決して100%保証されることはありませんが、罪のない変更があなたのセレンテストを妨げることはありませんが、これを最小化するために開発中に取ることができるステップがあります。 Seleniumはvarious different waysをクリックしたりタイプしたりする要素を「ターゲット」にします。できるだけ具体的なターゲットを使用したいので、すべての(X)HTMLノードに一意のID要素を付けてみてください。これにより、セレンがページ上のどこにあってもリンクがクリックされるようになります。

一意のIDが不可能な場合は、共通の要素を一意の識別子を持ついくつかのHTML要素で囲み、「seleniumのxpathテアリング機能を使用して、テキスト "signup"を含むリンクをクリックしますdivのidを "foo"に設定するか、divの3番目のリンクをID "foo"でクリックしてください。

(または他のレコーダー)が選ぶでしょう。その目的は、正確なページでテストを実行することで同じ結果が得られ、非常に脆弱なxpathを与えることです。

ここに簡単な答えはありません。もしあれば、ウェブアプリケーションのバグはずっと少なくなります。

0

SeleniumHQ.orgをお試しください。

マクロのようにクリック、入力、マウスの動きなどを記録できるブラウザ拡張機能です。ウェブアプリケーションをテストするために、マクロをテストとして保存して再生することができます。

他のブラウザを起動してテストを実行できる他のバージョンの製品もあるようです。

0

私も同じ質問があるので、私の答えが役立つかどうか分かりません。

とにかくまだやっていないのであれば、私は非常に便利で、クイックアンドダーティで、主要なブラウザで動作しているとお試しください。Windmill (私が思うほとんどの場合で)テストを変更しないリンクを変更

=)

3

あなたはdocumentation of SimpleTestのこの部分を通して親指と、彼らはテストのために持っている方法を見てみなければならない

  • ページのコンテンツ
  • ナビゲーション
  • クッキー
  • 画像
  • フレーム
  • フォーム送信
  • あなたはSimpleTestのを使用して終了していない場合でも、それは一見の価値があり
  • プロキシ

をリダイレクトします。

私にとって、最も有用なのは、サイトの操作に必要な各フォームのGETまたはPOSTリクエストの各パラメータを含む、フォームの送信をテストすることです。

多くのUIをテストするのか、小さなキー領域をテストするのかはあなた次第です。

+0

oops、typoを修正していただきありがとうございます – thomasrutter

関連する問題