Table des matières
PHPUnit 在 Windows 下的配置及使用教程
Maison php教程 php手册 PHPUnit 在 Windows 下的配置及使用教程

PHPUnit 在 Windows 下的配置及使用教程

Jun 13, 2016 am 08:50 AM
phpunit windows 配置

PHPUnit 在 Windows 下的配置及使用教程

由于我们项目涉及到php,因此需要对php代码进行单元测试。经过一番了解,决定用PHPUnit来测试php。PHPUnit花了不少时间摸索如何配置PHPUnit,看官网的文档也是一把泪。但知道怎么配置后,其实还是很简单的。

  • 系统:Windows 10 专业版

  • PHP版本:PHP 5.5.12

  • 服务器工具:WAMPSERVER 2.5

  • PHPUnit版本:PHPUnit 4.8

一、配置PHPUnit

首先到PHPUnit官网点此进入)下载相应的版本。我们使用的是php 5.5,于是选择PHPUnit 4.8。得到 .phar 文件,并把名字改为 phpunit.phar 。

把该文件放到任意位置。以我自己为例,我把它放到我们项目的目录下,即D:\repository\CourseManagement\mobile_api_test 。

右键 我的电脑 ,选择 属性 。点击左侧的 高级系统设置 。此时弹出 系统属性 ,选择 高级 选项卡,点击右下角的 环境变量 。 在用户变量里面,双击 PATH ,在 变量值 后面添加;D:\repository\CourseManagement\mobile_api_test 注意最前面的分号,路径填存放phpunit.phar的路径)。配置这个是为了在任意位置都能使用PHPUnit,不配置的话,需要在phpunit.phar的路径下才能使用PHPUnit。

官方文档里有一点没有提到,就是php的环境变量也要设置。比如我的 php.exe 在E:\software\wamp\bin\php\php5.5.12 里,那么也要在 PATH 后面添加;E:\software\wamp\bin\php\php5.5.12 。PS:可能是因为我没有安装PHP的IDE,所以一直没有配置它,偶然之间才想到可能要添加这个环境变量。

按快捷键 Win + R ,输入cmd并回车。进入存放phpunit.phar的路径。输入 echo @php "%~dp0phpunit.phar" %* > phpunit.cmd 并回车。接着输入 phpunit --version 并回车。如果得到输出 PHPUnit x.y.z by Sebastian Bergmann and contributors. 则表示配置好了如果有误,输入exit 并回车,重新来一遍)。如下图:

二、使用PHPUnit进行测试

使用PHPUnit,必须使用  。以login.php为例位置在D:\repository\CourseManagement\mobile_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></li></ol>
Copier après la connexion

这样没法测试,于是进行一翻修改。首先在 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></li></ol>
Copier après la connexion

除此之外,也要修改原来那个 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></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>
Copier après la connexion

开始写测试文件

我把测试文件放在 D:\repository\CourseManagement\mobile_api_test 这个文件夹内。新建一个文件 `login_test.php’ ,并写入以下代码:

<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></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>
Copier après la connexion

执行测试文件

快捷键 Win + R ,输入cmd并回车。进入该测试文件的目录,输入 phpunit login_test.php 执行测试。

简单的测试就完成了。

三、摸索过程

一开始下载PHPUnit,得到 .phar 文件,以为要解压,囧。找了半天才发现有一个能够解压这种文件的网站点此进入)。然而并没有什么用……

照着官方文档来做,运行时出现错误:

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

Google搜索,必应搜索,StackOverFlow搜索,百度搜索,搜到的答案都没有用。

主要是因为他们都默认你已经配置好了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>
Copier après la connexion

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

PHPUnit 4.8.18 by Sebastian Bergmann and contributors.

问题解决!

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

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

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

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

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Puis-je installer mysql sur Windows 7 Puis-je installer mysql sur Windows 7 Apr 08, 2025 pm 03:21 PM

Oui, MySQL peut être installé sur Windows 7, et bien que Microsoft ait cessé de prendre en charge Windows 7, MySQL est toujours compatible avec lui. Cependant, les points suivants doivent être notés lors du processus d'installation: téléchargez le programme d'installation MySQL pour Windows. Sélectionnez la version appropriée de MySQL (communauté ou entreprise). Sélectionnez le répertoire d'installation et le jeu de caractères appropriés pendant le processus d'installation. Définissez le mot de passe de l'utilisateur racine et gardez-le correctement. Connectez-vous à la base de données pour les tests. Notez les problèmes de compatibilité et de sécurité sur Windows 7, et il est recommandé de passer à un système d'exploitation pris en charge.

Comment accélérer la vitesse de chargement de PS? Comment accélérer la vitesse de chargement de PS? Apr 06, 2025 pm 06:27 PM

La résolution du problème du démarrage lent Photoshop nécessite une approche à plusieurs volets, notamment: la mise à niveau du matériel (mémoire, lecteur à semi-conducteurs, CPU); des plug-ins désinstallés ou incompatibles; nettoyer régulièrement les déchets du système et des programmes de fond excessifs; clôture des programmes non pertinents avec prudence; Éviter d'ouvrir un grand nombre de fichiers pendant le démarrage.

Comment tirer la ligne de référence verticale de PS Comment tirer la ligne de référence verticale de PS Apr 06, 2025 pm 08:18 PM

Tirez les guides verticaux dans Photoshop: Activer la vue du règlement (View & gt; souverain). Volez la souris sur le bord vertical de la règle, puis le curseur devient une ligne verticale avec des flèches doubles et maintenez et faites glisser la souris pour retirer la ligne de référence. Cliquez sur Supprimer en faisant glisser le guide ou en le plantant dans une croix.

Solutions aux erreurs rapportées par MySQL sur une version système spécifique Solutions aux erreurs rapportées par MySQL sur une version système spécifique Apr 08, 2025 am 11:54 AM

La solution à l'erreur d'installation de MySQL est: 1. Vérifiez soigneusement l'environnement système pour vous assurer que les exigences de la bibliothèque de dépendance MySQL sont satisfaites. Différents systèmes d'exploitation et exigences de version sont différents; 2. Lisez soigneusement le message d'erreur et prenez des mesures correspondantes en fonction des invites (telles que les fichiers de bibliothèque manquants ou les autorisations insuffisantes), telles que l'installation de dépendances ou l'utilisation de commandes sudo; 3. Si nécessaire, essayez d'installer le code source et vérifiez soigneusement le journal de compilation, mais cela nécessite une certaine quantité de connaissances et d'expérience Linux. La clé pour finalement résoudre le problème est de vérifier soigneusement l'environnement du système et les informations d'erreur et de se référer aux documents officiels.

Comment résoudre MySQL ne peut pas se connecter à l'hôte local Comment résoudre MySQL ne peut pas se connecter à l'hôte local Apr 08, 2025 pm 02:24 PM

La connexion MySQL peut être due aux raisons suivantes: le service MySQL n'est pas démarré, le pare-feu intercepte la connexion, le numéro de port est incorrect, le nom d'utilisateur ou le mot de passe est incorrect, l'adresse d'écoute dans my.cnf est mal configurée, etc. 2. Ajustez les paramètres du pare-feu pour permettre à MySQL d'écouter le port 3306; 3. Confirmez que le numéro de port est cohérent avec le numéro de port réel; 4. Vérifiez si le nom d'utilisateur et le mot de passe sont corrects; 5. Assurez-vous que les paramètres d'adresse de liaison dans My.cnf sont corrects.

Impossible d'accéder à MySQL depuis Terminal Impossible d'accéder à MySQL depuis Terminal Apr 08, 2025 pm 04:57 PM

Impossible d'accéder à MySQL à partir du terminal peut être dû à: le service MySQL n'est pas en cours d'exécution; Erreur de commande de connexion; autorisations insuffisantes; Connexion de blocs de pare-feu; Erreur de fichier de configuration MySQL.

MySQL ne peut pas être installé après le téléchargement MySQL ne peut pas être installé après le téléchargement Apr 08, 2025 am 11:24 AM

Les principales raisons de la défaillance de l'installation de MySQL sont les suivantes: 1. Problèmes d'autorisation, vous devez s'exécuter en tant qu'administrateur ou utiliser la commande sudo; 2. Des dépendances sont manquantes et vous devez installer des packages de développement pertinents; 3. Conflits du port, vous devez fermer le programme qui occupe le port 3306 ou modifier le fichier de configuration; 4. Le package d'installation est corrompu, vous devez télécharger et vérifier l'intégrité; 5. La variable d'environnement est mal configurée et les variables d'environnement doivent être correctement configurées en fonction du système d'exploitation. Résolvez ces problèmes et vérifiez soigneusement chaque étape pour installer avec succès MySQL.

See all articles