Windows_PHP チュートリアル_プログラミング テクノロジの PHPUnit の構成と使用法のチュートリアル

WBOY
リリース: 2016-06-20 12:33:09
オリジナル
892 人が閲覧しました

私たちのプロジェクトには php が含まれるため、php コードの単体テストを行う必要があります。ある程度理解した後、PHPUnit を使用して php をテストすることにしました。 PHPUnit の設定方法を理解するのに多くの時間を費やし、公式 Web サイトのドキュメントを読むのは涙が出るほどでした。しかし、設定方法を知ってしまえば、実際には非常に簡単です。

  • システム: Windows 10 Pro

  • PHP バージョン: PHP 5.5.12

  • サーバーツール: WAMPSERVER 2.5

  • PHPUnit バージョン: PHPUnit 4.8

1. PHPUnit を構成します

まず、PHPUnit 公式 Web サイト (ここをクリックして入る) にアクセスし、対応するバージョンをダウンロードします。私たちはphp 5.5を使用しているので、PHPUnit 4.8を選択しました。 .phar ファイルを取得し、名前を phpunit.phar に変更します。

このファイルを任意の場所に置きます。私自身を例として、プロジェクトのディレクトリ、つまり D:repositoryCourseManagementmobile_api_test にそれを置きました。

マイ コンピュータを右クリックし、プロパティを選択します。左側にあるシステムの詳細設定をクリックします。この時点で、システムのプロパティが表示され、詳細タブを選択し、右下隅の環境変数をクリックします。 ユーザー変数で、PATH をダブルクリックし、変数値 の後に ;D:repositoryCourseManagementmobile_api_test を追加します (先頭のセミコロンに注意し、phpunit.phar が保存されているパスを入力します)。これは、PHPUnit を任意の場所で使用できるように構成されています。構成されていない場合、PHPUnit は phpunit.phar のパスで使用する必要があります。

公式ドキュメントに記載されていないことの 1 つは、PHP 環境変数も設定する必要があるということです。たとえば、php.exeE:softwarewampbinphpphp5.5.12 にある場合、PATH の後に ;E:softwarewampbinphpphp5.5.12 を追加する必要もあります。 PS: おそらく、PHP IDE をインストールしていないため、この環境変数を追加しようと思って設定していないのかもしれません。

ショートカット キー Win + R を押し、「cmd」と入力して Enter を押します。 phpunit.phar が保存されているパスを入力します。 echo @php "%~dp0phpunit.phar" %* > phpunit.cmd と入力して Enter キーを押します。次に、phpunit --version と入力して Enter キーを押します。 PHPUnit x.y.z by Sebastian Bergmann and contributors. という出力が得られた場合は、設定が完了したことを意味します (間違っている場合は、exit を入力して Enter キーを押して再試行してください)。以下に示すように:

2. PHPUnit を使用してテストします

PHPUnit を使用するには、クラスを使用する必要があります。 login.php (D:repositoryCourseManagementmobile_api にあります) を例にとると、初期バージョンは次のようになります (このブログのコードについて文句を言うことは歓迎です):

<ol class="dp-c"><li class="alt"><span><span><php </span></span></li><li><span> </span></li><li class="alt"><span>    <span class="func">error_reporting</span><span>(0); </span></span></li><li><span> </span></li><li class="alt"><span>    <span class="vars">$workNumber</span><span> = </span><span class="vars">$_POST</span><span>[</span><span class="string">"login-user"</span><span>]; </span></span></li><li><span>    <span class="vars">$password</span><span> = </span><span class="vars">$_POST</span><span>[</span><span class="string">"login-password"</span><span>]; </span></span></li><li class="alt"><span>    <span class="vars">$tableName</span><span> = </span><span class="vars">$_POST</span><span>[</span><span class="string">"ident"</span><span>]; </span></span></li><li><span> </span></li><li class="alt"><span>    <span class="vars">$con</span><span> = mysqli_connect(</span><span class="string">"localhost"</span><span>, </span><span class="string">"root"</span><span>, </span><span class="string">""</span><span>, </span><span class="string">"teacher_class_system"</span><span>); </span></span></li><li><span>    <span class="keyword">if</span><span> (!</span><span class="vars">$con</span><span>) { </span></span></li><li class="alt"><span>        <span class="keyword">die</span><span>(</span><span class="string">'Could not connect: '</span><span> . mysql_error()); </span></span></li><li><span>    } <span class="keyword">else</span><span> { </span></span></li><li class="alt"><span>        mysqli_query(<span class="vars">$con</span><span>, </span><span class="string">"SET NAMES utf8"</span><span>); </span></span></li><li><span> </span></li><li class="alt"><span>        <span class="vars">$result</span><span> = mysqli_query(</span><span class="vars">$con</span><span>, </span><span class="string">"SELECT * FROM $tableName where workNumber = $workNumber and password = $password"</span><span>); </span></span></li><li><span>        <span class="keyword">if</span><span> (mysqli_num_rows(</span><span class="vars">$result</span><span>) < 1) { </span></span></li><li class="alt"><span>                <span class="func">echo</span><span> </span><span class="string">"false"</span><span>; </span></span></li><li><span>        } <span class="keyword">else</span><span> { </span></span></li><li class="alt"><span>                <span class="vars">$result_arr</span><span> = mysqli_fetch_assoc(</span><span class="vars">$result</span><span>); </span></span></li><li><span>                <span class="func">echo</span><span> json_encode(</span><span class="vars">$result_arr</span><span>, JSON_UNESCAPED_UNICODE); </span></span></li><li class="alt"><span>        } </span></li><li><span>    } </span></li><li class="alt"><span> </span></li><li><span>    > </span></span></li></ol>
ログイン後にコピー

テストする方法がないので、いくつか修正を加えました。まず、login.php が存在するフォルダー内にフォルダー classes を作成し、その中に新しい class_login.php を作成します。その内容は login.php です。

<ol class="dp-j"><li class="alt"><span><span><php </span></span></li><li><span> </span></li><li class="alt"><span>   <span class="keyword">class</span><span> Login { </span></span></li><li><span>       <span class="comment">// 测试工具PHPUnit要求一定要在这里给变量默认值,于是默认为空。</span><span> </span></span></li><li class="alt"><span>       <span class="keyword">public</span><span> function login($workNumber = </span><span class="string">""</span><span>,$password = </span><span class="string">""</span><span>,$tableName = </span><span class="string">""</span><span>) {        </span></span></li><li><span>           $con = mysqli_connect(<span class="string">"localhost"</span><span>, </span><span class="string">"root"</span><span>, </span><span class="string">""</span><span>, </span><span class="string">"teacher_class_system"</span><span>); </span></span></li><li class="alt"><span>           <span class="keyword">if</span><span> (!$con) { </span></span></li><li><span>               die(<span class="string">'Could not connect: '</span><span> . mysqli_error()); </span></span></li><li class="alt"><span>           } <span class="keyword">else</span><span> { </span></span></li><li><span>               mysqli_query($con, <span class="string">"SET NAMES utf8"</span><span>); </span></span></li><li class="alt"><span> </span></li><li><span>               $result = mysqli_query($con, <span class="string">"SELECT * FROM $tableName where workNumber = $workNumber and password = $password"</span><span>); </span></span></li><li class="alt"><span>               <span class="keyword">if</span><span> (!$result  mysqli_num_rows($result) == </span><span class="number">0</span><span>) { </span></span></li><li><span>                   <span class="keyword">return</span><span> </span><span class="string">"false"</span><span>; </span></span></li><li class="alt"><span>               } <span class="keyword">else</span><span> { </span></span></li><li><span>                   $result_arr = mysqli_fetch_assoc($result); </span></li><li class="alt"><span>                   <span class="keyword">return</span><span> json_encode($result_arr, JSON_UNESCAPED_UNICODE); </span></span></li><li><span>               } </span></li><li class="alt"><span>           } </span></li><li><span>       } </span></li><li class="alt"><span>   } </span></li><li><span> </span></li><li class="alt"><span>   > </span></span></li></ol>
ログイン後にコピー
さらに、元の

の内容も変更する必要があります。 変更された内容は次のとおりです。 login.php

<ol class="dp-j">
<li class="alt"><span><span><php </span></span></li><li><span>  error_reporting(<span class="number">0</span><span>); </span></span></li><li class="alt"><span> </span></li><li><span>  require_once <span class="string">'./classes/class_login.php'</span><span>; </span></span></li><li class="alt"><span> </span></li><li><span>  $workNumber = $_POST[<span class="string">"login-user"</span><span>]; </span></span></li><li class="alt"><span>  $password = $_POST[<span class="string">"login-password"</span><span>]; </span></span></li><li><span>  $tableName = $_POST[<span class="string">"ident"</span><span>]; </span></span></li><li class="alt"><span> </span></li><li><span>  $log = <span class="keyword">new</span><span> Login; </span></span></li><li class="alt"><span>  $response = $log->login($workNumber,$password,$tableName); </span></span></li>
<li><span> </span></li>
<li class="alt"><span>  <span class="keyword">if</span><span>($response != </span><span class="string">"false"</span><span>) { </span></span></li>
<li><span>      session_start(); </span></li>
<li class="alt"><span>      $_SESSION[<span class="string">'id'</span><span>]=$tableName; </span></span></li>
<li><span>  } </span></li>
<li class="alt"><span> </span></li>
<li><span>  echo $response; </span></li>
<li class="alt"><span> </span></li>
<li><span>  > </span></li>
</ol>
ログイン後にコピー

テスト ファイルの書き込みを開始します

テスト ファイルを

フォルダーに置きました。新しいファイル「login_test.php」を作成し、次のコードを記述します: D:repositoryCourseManagementmobile_api_test

<ol class="dp-j">
<li class="alt"><span><span><php </span></span></li><li><span>  require_once dirname(__FILE__).<span class="string">'/../mobile_api/classes/class_login.php'</span><span>; </span></span></li><li class="alt"><span> </span></li><li><span>  <span class="keyword">class</span><span> LoginTest </span><span class="keyword">extends</span><span> PHPUnit_Framework_TestCase { </span></span></li><li class="alt"><span>      <span class="keyword">public</span><span> function testLoginSuccess() { </span></span></li><li><span>          $expected = <span class="string">'{"workNumber":"00001","password":"00001","name":"西瓜","sex":"男","birthday":"20151201","department":"计算机","telephone":"110","email":"git@github.com"}'</span><span>; </span></span></li><li class="alt"><span> </span></li><li><span>          $workNumber = <span class="string">'00001'</span><span>; </span></span></li><li class="alt"><span>          $password = <span class="string">'00001'</span><span>; </span></span></li><li><span>          $tableName = <span class="string">'user_teacher'</span><span>; </span></span></li><li class="alt"><span>          $lg = <span class="keyword">new</span><span> Login; </span></span></li><li><span>          $actual = $lg->login($workNumber,$password,$tableName); </span></span></li>
<li class="alt"><span> </span></li>
<li><span>          $<span class="keyword">this</span><span>->assertEquals($expected,$actual); </span></span></li>
<li class="alt"><span>      } </span></li>
<li><span> </span></li>
<li class="alt"><span>      function testLoginFail() { </span></li>
<li><span>          $expected = <span class="string">'false'</span><span>; </span></span></li>
<li class="alt"><span> </span></li>
<li><span>          $workNumber = <span class="string">'11111'</span><span>; </span></span></li>
<li class="alt"><span>          $password = <span class="string">'11111'</span><span>; </span></span></li>
<li><span>          $tableName = <span class="string">'user_teacher'</span><span>; </span></span></li>
<li class="alt"><span> </span></li>
<li><span>          $lg = <span class="keyword">new</span><span> Login; </span></span></li>
<li class="alt"><span>          $actual = $lg->login($workNumber,$password,$tableName); </span></li>
<li><span>          $<span class="keyword">this</span><span>->assertEquals($expected,$actual); </span></span></li>
<li class="alt"><span>      } </span></li>
<li><span>  } </span></li>
<li class="alt"><span> </span></li>
<li><span>  > </span></li>
</ol>
ログイン後にコピー

テストファイルを実行

ショートカット キー Win + R、cmd と入力して Enter を押します。テストファイルのディレクトリを入力し、

と入力してテストを実行します。 phpunit login_test.php

簡単なテストが行​​われました。

3. 探索プロセス

初めて PHPUnit をダウンロードしたとき、

ファイルを入手して、それを解凍する必要があると思いましたが、恥ずかしかったです。長い間探した結果、そのようなファイルを解凍できるWebサイトを見つけました(ここをクリックして入力してください)。でもそれは役に立たない….phar

公式ドキュメントに従って、実行時にエラーが発生しました:

'php' は内部コマンド、外部コマンド、または操作可能なプログラムとして認識されません

またはバッチファイル。

Google 検索、Bing 検索、StackOverFlow 検索、Baidu 検索、見つかった答えは役に立ちません。

主な理由は、これらはすべて PHP 環境変数が設定されていることを前提としているためです...

最后想着是不是之前生成的 phpunit.cmd 有问题?于是查看一下这个文件的内容。突然想到是不是PHP环境变量没设置的原因?打开cmd,输入 php --version 。得到:

‘php’ 不是内部或外部命令,也不是可运行的程序
或批处理文件。

和上面的错误一样!果然是这里的问题。于是把 ;E:\software\wamp\bin\php\php5.5.12 添加到环境变量中。再运行 php --version 得到:

<ol class="dp-c">
<li class="alt"><span><span>PHP 5.5.12 (cli) (built: Apr 30 2014 11:20:58) </span></span></li>
<li><span>Copyright (c) 1997-2014 The PHP Group </span></li>
<li class="alt"><span>Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies </span></li>
<li><span>with Xdebug v2.2.5, Copyright (c) 2002-2014, by Derick Rethans </span></li>
</ol>
ログイン後にコピー

再进入 phpunit.cmd 所在文件夹,运行 phpunit --version。得到:

PHPUnit 4.8.18 by Sebastian Bergmann and contributors.

问题解决!

经过这次的探索,以后碰到”找不到xxx”这种问题的时候,首先会想起环境变量的设置。

比如解决这个问题的同一天下午,我想使用Visual Studio Code的Git功能,但是却得到提示:

第一个反应是:我明明安装了msysgit啊。

第二个反应是:会不会是环境变量没配置?打开环境变量配置,果然没有。于是将 git.exe 所在文件夹的路径添加进去。重启visual Studio Code,问题解决!

【责任编辑:wangxueyan TEL:(010)68476606】



関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート