四、使用 NetBeans 调试和测试
如果调试被定义为从程序中去除 bug 的艺术,那么编程就必须把它们放进去。
在本章中,我们将学习使用 NetBeans IDE 调试和测试 PHP web 应用程序。我们将处理示例项目,学习 bug 搜索和测试的过程。本章将讨论以下主题:
- 配置 XDebug
- 用 XDebug 调试 PHP 源代码
- 使用 PHPUnit 和 Selenium 进行单元测试
- 代码覆盖率
让我们去窃听猎人,做些真正的把戏。。。
调试古老的编程艺术
编写程序后,下一步是测试程序,以确定其是否按预期工作。有时,当我们在编写代码之后第一次运行代码时,可能会产生错误,例如语法错误、运行时错误和逻辑错误。调试是一步一步地查找错误的过程,这样可以修复错误,使程序按预期的方式工作。
现代编辑器可以检测几乎所有的语法错误,因此我们可以在键入代码时修复它们。此外,还有一些工具可以与 IDE 集成以查找 bug,它们被称为调试器。有很多很好的 PHP 调试器,比如 XDebug 和 FireHP(用于 FireBug 粉丝)。此类调试器还附带应用程序探查器。在本章中,我们将尝试使用 XDebug 使用 NetBeans 调试 PHP 项目。
用 XDebug 调试 PHP 源代码
XDebug高度可配置,可适应多种情况。您可以实时检查局部变量、设置监视、设置断点和计算代码。您还可以使用转到快捷方式和超文本链接导航到声明、类型和文件。为所有项目使用全局 PHP include
路径,或为每个项目自定义。
netbeansideforphp 还提供命令行调试。PHP 程序输出显示在 IDE 本身的命令行显示中,您无需切换到浏览器即可检查生成的 HTML。
您可以在本地或远程调试脚本和网页。NetBeans PHP 调试器集成允许您将服务器路径映射到本地路径,以便启用远程调试。
XDebug 提供了如下功能:
- 错误时的自动堆栈跟踪
- 函数调用日志记录
- 增强
var_dump()
输出和代码覆盖信息
堆栈跟踪向您显示错误发生的位置,允许您跟踪函数调用和原始行号。 var_dump()
输出通过 XDebug 以更精细的方式显示。
提示
XDebug 覆盖 PHP 用于显示变量转储的默认 var_dump()
函数。XDebug 的版本包含不同变量类型的不同颜色,并对数组元素/对象属性的数量、最大深度和字符串长度进行了限制。
配置 XDebug
在每个单独的操作系统上配置 XDebug 非常容易。在本节中,让我们使用我们的开发环境配置 XDebug,即 XAMPP、LAMP 和 MAMP。您所要做的就是在 php.ini
处启用一些行或按一些命令。由于我们已经安装了开发包,我们将只在这些堆栈上激活 XDebug。首先,我们将使该工具在本地主机系统上工作,然后将其添加到 NetBeans。
行动时间-在 Windows 上安装 XDebug
默认情况下,XDebug 扩展附带 XAMPP 包。您只需从加载的 .ini
文件中启用它。请注意,可能存在多个 php.ini
文件,并且不同操作系统之间的文件位置可能不同。所以,让我们试试看。。。
-
Locate the loaded
php.ini
file from yourphpinfo()
, by pointing your browser to http://localhost/xampp/phpinfo.php.您可以在
D:\xampp\php\php.ini
处看到加载的php.ini
文件。 -
打开位于
D:\xampp\php\php.ini
的php.ini
文件,找到以下行:```php [XDebug] ;zend_extension = "D:\xampp\php\ext\php_xdebug.dll"
```
-
通过删除前导分号来查找并取消注释以下行:
```php zend_extension = "D:\xampp\php\ext\php_xdebug.dll" xdebug.remote_enable = 1 xdebug.remote_handler = "dbgp" xdebug.remote_host = "localhost" xdebug.remote_port = 9000
```
-
保存
php.ini
文件并从 XAMPP 控制面板重新启动 Apache web 服务器,以启用 XDebug 扩展。 -
To verify whether the XDebug object is enabled or not, refresh your
phpinfo()
page and find XDebug enabled, as shown in the following screenshot: -
If you have XDebug enabled, it will override
var_dump()
in PHP. You may dump a variable likevar_dump($var)
inside your code, and the browser will display the enhancedvar_dump
as follows (strings are printed in red):答对 了您刚刚在开发环境中加载了 XDebug。
刚才发生了什么事?
我们刚刚在 Windows 中为 XAMPP 包启用了 XDebug,还验证了加载了配置的扩展。请注意,可以遵循启用 XDebug 的一般步骤来启用 php.ini
中的其他内置扩展。您只需在 php.ini
处取消对扩展的注释,然后重新启动 web 服务器即可使更改生效。此外,在 LAMP 或 MAMP 堆栈中启用 XDebug 也非常类似。
提示
始终在 phpinfo()
页面查看 php.ini
的加载路径。
在 Ubuntu 上启用 XDebug
在 Ubuntu 中启用 XDebug 非常容易。我们可以通过apt 获取软件包安装程序进行安装,并更新 xdebug.ini
加载的配置。
行动时间-在 Ubuntu 上安装 XDebug
从控制台运行以下命令:
-
使用以下命令安装 XDebug:
```php sudo apt-get install php5-xdebug
```
-
使用
gedit
(内置)编辑器更新xdebug.ini
。```php sudo gedit /etc/php5/apache2/conf.d/xdebug.ini
```
-
Change
xdebug.ini
so that it looks as follows:```php zend_extension=/usr/lib/php5/20090626+lfs/xdebug.so xdebug.remote_enable=1 xdebug.remote_handler=dbgp xdebug.remote_mode=req xdebug.remote_host=127.0.0.1 xdebug.remote_port=9000
```
请注意,这些配置的第一行可能在
xdebug.ini
中可用,您可能需要添加其余的行。 -
重新启动 Apache。
```php sudo service apache2 restart
```
-
刷新
phpinfo()
页面,找到安装有版本号的最新 XDebug。
刚才发生了什么事?
我们刚刚在 Ubuntu 中为我们的 LAMP 启用了 XDebug,还验证了加载了配置的扩展。请注意,可以遵循启用 XDebug 的一般步骤来启用 php.ini
中的其他内置扩展。您只需在 php.ini
处取消对扩展的注释,然后重新启动 web 服务器即可使更改生效。
在 Mac OS X 上启用 XDebug
修改加载的 php.ini
文件的适当版本以在 Mac 中启用 XDebug,取消注释以下行,并从 MAMP 控制面板重新启动 Apache 服务器。
[xdebug]
zend_extension="/Applications/MAMP/bin/php5.3/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so"
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_host=localhost
xdebug.remote_port=9000
XDebug 现在正在 Mac OSX 上运行。MAMP Pro 用户可以通过从菜单中选择文件【编辑模板】PHP 5.3.2 PHP.ini从 MAMP Pro 控制面板轻松编辑 php.ini
。
最后,我们在本地开发环境中启用了 XDebug。
使用 NetBeans 调试 PHP 源代码
要继续,我们需要检查 NetBeans 所需的调试设置。选择工具【选项】PHP【调试】选项卡
在此窗口中,取消选中在第一行停止复选框,因为我们希望在所需行停止并选中手表和气球评估复选框。此选项使您能够在调试时查看自定义表达式或变量。
现在,让我们看看在 NetBeans 窗口中运行的调试会话:
在此屏幕截图中,调试工具栏和按钮由功能名称指示。
注
从了解有关调试工具栏的更多信息 http://netbeans.org/kb/docs/php/debugging.html#work 。
调试器窗口
启动调试会话时,一组调试器窗口将在主编辑器窗口下方打开。要添加新窗口,请选择窗口调试。以下窗口可用:
- 局部变量显示初始化变量及其类型和值的列表
- 手表显示用户定义表达式及其值的列表
- 调用堆栈以相反顺序显示被调用函数列表;最后调用的函数位于列表的顶部
- 断点显示文件列表和设置断点的行号
- 会话显示当前活动调试会话的列表
- Threads窗口指示当前活动的 PHP 脚本,以及它是在断点处挂起还是正在运行。如果脚本正在运行,则需要转到浏览器窗口并与脚本交互。
- 源窗口显示为调试会话加载的所有文件和脚本。“源代码”窗口当前不适用于 PHP 项目。
基本调试工作流程
以下是基本的调试工作流程:
- 用户在应该暂停 PHP 源代码执行的行上设置断点。
-
When that line is reached, the user executes the script one line after another, by pressing the F7 and F8 buttons, and checks the values of the variables.
注
NetBeans IDE 键盘快捷键调试测试见附录。
操作时间-运行调试会话
本节说明了标准调试会话,我们将创建一个示例项目来在其上进行调试:
- 创建一个 netbeansphp 项目。例如,我们将其命名为
chapter4
。 -
Type the following code in the
index.php
file:```php <?php $fruits = array("Apple", "Banana", "Berry", "Watermelon"); $myfruit = ""; fruit_picker(); //first time call echo "My fruit is : " . $myfruit . "
\n"; fruit_picker(); //second time call echo "My fruit is now: " . $myfruit . "
\n"; fruit_picker(); //third time call echo "My fruit is finally: " . $myfruit . "
\n"; function fruit_picker () { Global $myfruit, $fruits; $myfruit = $fruits[rand(0, 3)]; } ?>```
前面的代码包含:
- 包含水果名称的
$fruits
数组。 - 一个变量
$myfruit
,它以字符串形式包含一个水果名称,最初为空字符串。 - 一种方法
fruit_picker(),
,随机从$fruits
数组中选取一个水果名称,并更改$myfruit
的值。此外,$fruits
和$myfruit
在函数内部定义为Global
,以便函数可以在其全局范围内使用和修改它们。 - To test the debugging steps, we can set a breakpoint by pressing Ctrl+F8 at the beginning of the PHP block, as shown in the following screenshot, or simply click on the line number of that line, to add the breakpoint:
- 包含水果名称的
-
要启动调试会话,请按Ctrl+F5,或单击调试工具栏中的调试项目(第四章)按钮,或右键单击项目名称并在项目窗口中选择调试。调试器将在断点处停止。浏览器以页面加载模式打开,项目调试 URL 为
http://localhost/chapter4/index.php?XDEBUG_SESSION_START=netbeans-xdebug
。 -
Press F7 three times to step into the third execution point from the breakpoint. The debugger stops at the line where the function
fruit_picker()
is called for the first time. The Variables window shows the variables$fruits
and$myfruit
with their values similar to the following screenshot:在我们的代码中,您可以看到
fruit_picker()
函数将被连续调用三次。 -
To step into the
fruit_picker()
function, press F7, and the debugger will start to execute the code insidefruit_picker()
, as shown in the following screenshot: -
Press F7 two times, and the
fruit_picker()
execution will end. Now, check the new value of$myfruit
at the Variables window: -
Again, press F7 three times to step into the
fruit_picker()
function from the line where it has been called for the second time. As you have already verified that the function is working perfectly, you may want to cancel the function execution. To Step Out and return to the next line, press Ctrl+F7.请注意,
$myfruit
的值不断变化,您可以将鼠标悬停在该变量上查看它。 -
由于您刚刚检查并发现您的代码工作正常,您可以按F8跳过当前行。
-
Finally, you can go through the next lines by pressing F7, or step over by pressing F8 and reach to the end. Again, press Shift+F5 or click on the Finish Debugger Session button, if you wish to finish the session. At the end of the session, the browser displays the result (code output) of the session.
刚才发生了什么事?
调试会话的练习已经完成,希望我们能够掌握使用 NetBeans 进行调试的方法。还可以添加多个断点以跟踪程序执行。因此,通过这种方式,您可以跟踪程序中的所有变量、表达式、方法调用序列、程序控件跳转等。这是一个查找代码内部错误的过程。主要是,您现在已经准备好在编码时克服一些不需要的情况或 bug。
增加手表
要在代码执行中观察表达式,添加 watch 表达式可以帮助捕获错误。现在,让我们有一些乐趣。。。
行动时间-添加要观看的表情
例如,我们想通过 fruit_picker()
函数测试是否再次采摘了相同的水果名称。我们可以在每次随机选取一个新的水果名之前保存 $myfruit
值,并使用表达式比较这两个水果名。因此,让我们使用以下步骤添加表达式观察程序:
-
Modify the
fruit_picker()
function as follows:```php function fruit_picker() { Global $myfruit, $fruits; $old_fruit = $myfruit; $myfruit = $fruits[rand(0, 3)]; }
```
我们刚刚添加了行
$old_fruit = $myfruit;
以保留$myfruit,
的先前值,以便我们可以在函数末尾比较$old_fruit
中的先前拾取和$myfruit
中的新拾取。我们实际上想检查是否采摘了相同的水果。 -
Select Debug | New Watch or press Ctrl+Shift+F7. The New Watch window is opened.
-
Enter the following expression and click on OK.
```php ($old_fruit == $myfruit)
```
我们将在
fruit_picker()
函数的右括号(})处观察这个表达式结果。如果表达式在函数 closing brace 处产生(bool)1,那么我们将知道新采摘的水果是否与旧水果相同,或者再次采摘了相同的水果。添加的 watch 表达式可以在watchs和Variables窗口中找到。 -
Run the debugging session, as shown in the previous section. When the debugger stops at the closing brace of the
fruit_picker()
function, check that the expression value is (bool)0
if the new pick is different from the old one, and the value is (bool)1
if it's the same consecutive pick again.通过这种方式,您可以继续观察表达式以查找 bug。
刚才发生了什么事?
将 watch 表达式添加到调试会话非常有趣。您可以添加多个手表来分析某些编程缺陷。简单地说,调试使您能够查看内部变量、函数、表达式、执行流等,因此您可以轻松地发现错误并清除它。
注
NetBeans IDE 键盘快捷键调试测试见附录。
突击测验-使用 XDebug 进行调试
- 以下哪些是 XDebug 功能?
- 错误时自动堆栈跟踪
- 自动错误修复
- 函数调用日志记录
- 增强型
var_dump()
- 当 NetBeans 中出现断点时会发生什么?
- IDE 将跳过断点并显示结果
- IDE 将在此时停止代码执行,使您可以查看 windows 调试中发生的情况
- IDE 将终止调试会话并重置正在调试的窗口的结果
- 以上都没有
- 手表的用途是什么?
- 以 NetBeans 显示时间
- 在代码执行中观察表达式
- 观察表达时间
- 检查调试会话
拥有一个 go hero-探索 NetBeans 调试功能
在调试窗口中,启用名为显示请求的 URL的功能。启用后,调试期间将出现一个新的输出窗口,其中将显示当前处理的 URL。另外,启用另一个名为PHP 调试器控制台的输出窗口,以查看其中已调试脚本的输出。记住在您的 php.ini
文件中设置 output_buffering = Off
,以便立即查看。
使用 PHPUnit 进行测试
在测试驱动的开发方法中,源代码测试是必不可少的。测试描述了使用一组可运行的代码片段检查代码行为是否符合预期的方法。单元测试测试软件各部分(单元)的正确性,其可运行代码片段称为单元测试。NetBeans IDE 支持使用PHPUnit和Selenium测试框架的自动化单元测试。
配置 PHPUnit
当我们在 Windows 框中运行 XAMPP 时,它提供了一个内置的 PHPUnit 包。请注意,如果您的项目是在 PHP5.3 中运行的,那么您应该使用 PHPUnit 3.4.0 或更高版本。在我们的例子中,最新的 XAMPP1.7.7(带有 PHP5.3.8)堆栈中安装了 PHPUnit 2.3.6,这与 PHP5.3 不兼容。您还需要升级现有的PHP 扩展和应用程序存储库(PEAR安装,以安装最新的 PHPUnit 和所需的 PEAR 软件包。
要检查已安装的 PEAR、PHP 和 Zend 引擎的版本,请从命令提示符或终端浏览到 PHP 安装目录 D:\xampp\php
,然后输入 pear version
命令,该命令将给出以下输出:
PEAR Version: 1.7.2
PHP Version: 5.3.8
Zend Engine Version: 2.3.0
Running on: Windows NT....
因此,是时候安装最新的 PHPUnit 了。为了做到这一点,PEAR 应该首先升级。
行动时间-通过 PEAR 安装 PHPUnit
在以下步骤中,我们将通过 PEAR 升级 PEAR 并安装 PHPUnit,用于相应的环境:
-
Run the command prompt as an administrator, go to the PHP installation directory where the
pear.bat
file belongs (D:\xampp\php), and execute the following command:```php pear upgrade pear
```
这将升级现有的 PEAR 安装。在 Ubuntu 或 Mac OS X 系统中,运行以下命令:
```php sudo pear upgrade pear
```
对于 MAMP,如果您遇到错误 sudo:pear:command not found,请参阅节配置 MAMP问题。
-
To install the latest PHPUnit, type the following two commands:
```php pear config-set auto_discover 1 pear install pear.phpunit.de/PHPUnit
```
它会自动发现下载频道,并安装最新的 PHPUnit 以及可用的软件包。
-
To check the PHPUnit installation, run the following command:
```php phpunit version
```
您将看到类似于以下内容的命令:
```php PHPUnit 3.6.10 by Sebastian Bergmann.
```
-
要列出 PHPUnit 的远程包,请运行以下命令:
pear remote-list -c phpunit
刚才发生了什么事?
我们已经使用 pear upgrade pear
命令升级了 PEAR 安装。我们启用了 PEAR 通道、自动发现配置,并使用这些自动安装通道安装了最新的 PHPUnit。通过这种方式,可以从扩展存储库轻松安装其他 PHP 扩展。
同样,如果您升级了 PEAR 安装,并在之前启用了自动发现功能,那么只有命令 pear install pear.phpunit.de/PHPUnit
才能完成 PHPUnit 安装。
提示
在 Windows 中以管理员身份运行命令提示符,以简化目录权限。您可以右键点击程序并选择以管理员身份运行。
配置 MAMP 问题
在 MAMP 的情况下,当从终端使用 PEAR 命令时,如果您遇到错误 pear: command not found
,那么运行 which php
将指向 OS X 的默认版本。
$ pear -bash: pear: command not found $ which php /usr/bin/php
然后您可能需要修复它。为了纠正这个问题,我们需要将 PHP 的 bin
目录添加到我们的路径中。 PATH
是一个环境变量,表示在哪些目录中查找命令。 PATH
可以通过编辑您 home
目录下的 .profile
文件进行修改。我们在本教程中使用了 PHP5.3 bin
版本路径,但您可以从任何可用版本中进行选择。
从终端运行以下命令,添加所需 PHP 的 bin
目录,使用 php, pear
以及该目录中的其他相关可执行文件:
$ echo "export PATH=/Applications/MAMP/bin/php/php5.3/bin:$PATH" >> ~/.profile
如您所见,在用户的 home
目录中的 .profile
文件中添加了一行,其中包括环境变量 PATH
的 php5.3 bin
目录路径。
现在,停止 MAMP 并使用以下命令更改文件的权限,以使这些文件可执行:
chmod 774 /Applications/MAMP/bin/php5.3/bin/pear chmod 774 /Applications/MAMP/bin/php5.3/bin/php
chmod
命令更改文件模式或访问控制列表。 774
表示允许文件用户的文件“所有者”和“组”读取、写入和执行文件。其他人只能读取该文件,但不能写入或执行该文件。
在编写时,最新的 MAMP 1.9 版本附带了一个用于 PHP 版本的损坏的 pear.conf
文件。因此,使用以下命令重命名该文件以防止其加载到系统:
mv /Applications/MAMP/conf/php5.3/pear.conf /Applications/MAMP/conf/php5.3/backup_pear.conf
实际上,在给定的 pear.conf
文件中,PHP 路径字符串包含 php5
而不是 php5.3
或 php5.2
。
现在,再次启动 MAMP 并重新启动终端会话。因此,MAMP 问题是固定的,您可以通过从终端运行 which php
或 which pear
命令来测试它。为了使用 MAMP 安装 PHPUnit,您现在可以通过本章的 PEAR 部分继续执行行动时间中的步骤 1。
向 NetBeans 添加 PHPUnit
要使用 NetBeans IDE 使 PHPUnit 成为默认的单元测试仪,请选择工具【选项】PHP 选项卡单元测试选项卡,使用搜索在PHPUnit 脚本字段中自动输入 PHPUnit .bat
脚本路径,然后点击确定。
同样,对于 Mac OS X,PHPUnit 路径类似于 /Applications/MAMP/bin/php5.3/bin/phpunit
。
突击测验-梨
- 梨代表什么?
- PHP 扩展应用程序存储库
- 扩展与应用库
- PHP 扩展社区库
- PHP 额外适用存储库
创建并运行 PHPUnit 测试
在本节中,我们将学习创建和运行 PHPUnit 测试。NetBeans IDE 可以在一个文件中的所有 PHP 类上创建测试脚本并运行 PHPUnit 测试。IDE 自动化了测试脚本的生成和整个测试过程。为了确保测试脚本生成器能够工作,请将 PHP 文件命名为与文件中第一个类相同的名称。
用 PHPUnit 进行动作测试的时间
在本教程中,我们将创建一个新的 NetBeans 项目,使用 PHPUnit 从 IDE 测试我们的 PHP 类。为此,请执行以下步骤:
-
Create a new project named
Calculator
, add a PHP class namedCalculator
in the project (right-click on project node and select New | PHP Class, then insert the class name), and type the following code for theCalculator
class:```php <?php class Calculator { public function add($a, $b) { return $a + $b; } } ?>
```
您可以看到,
add()
方法只执行两个数字的加法并返回总和。我们将测试这个方法单元,看看它是否返回正确的和。 -
添加一个带有
@assert
注释和一些示例输入输出的注释块,如下面的代码所示。请注意,以下示例中包含一个错误的断言:```php <?php class Calculator { /* * @assert (0, 0) == 0 * @assert (0, 1) == 1 * @assert (1, 0) == 1 * @assert (1, 1) == 2 * @assert (1, 2) == 4 / public function add($a, $b) { return $a + $b; } } ?>
```
-
In the Projects window, right-click on the
Calculator.php
node and select Tools | Create PHPUnit Tests. Note that you can create tests for all the files in a project using the context menu in the Source Files node. -
The first time you create tests, a dialog box opens asking you for the directory in which you want to store test scripts. In this example, the Browse function (button) may be used to create a
tests
directory.我们可以将测试文件与源文件夹分开。此外,如果希望从将来的源版本控制中排除这些测试脚本,可以将它们分开。
-
The IDE generates a test class in a file called
CalculatorTest.php
, which appears in your Projects window and opens in the editor.注意,已经为类内的每个
@assert
注释创建了测试方法。 -
To test the
Calculator.php
file, right-click on the file's node and select Test, or press Ctrl+F6. The IDE runs the tests and displays the results in the Test Results window.如您所见,由于输入不正确,其中一个测试失败。在测试结果窗口中用黄色感叹号标记。此外,您还可以看到通过测试和失败测试的数量。因此,可以获得整体通过测试的百分比(用绿色条表示)。
-
请注意,您也可以为整个项目运行测试。右键点击项目节点,选择测试,或按Alt+F6。考虑检查 AutoT4 输出 URL T5>窗口,以获得更详细的文本输出。
刚才发生了什么事?
PHP 类或项目可以使用 PHPUnit 进行部分测试。这里最好的部分是,您不需要费心生成测试脚本并以图形化的方式显示测试结果,因为 IDE 会处理它。您可以在了解有关 PHPUnit 测试的更多信息 http://www.phpunit.de/manual/current/en/ 。
注
用 PHPUnit 处理代码覆盖率
NetBeans IDE 在 PHPUnit 的帮助下提供了代码覆盖特性。代码覆盖率检查 PHPUnit 测试是否覆盖了所有方法。在本节中,我们将看到代码覆盖率如何与现有的 Calculator
类一起工作。
行动时间-使用代码覆盖率
按照以下步骤查看 NetBeans 中的代码覆盖率功能是如何工作的:
-
打开
Calculator.php
,添加一个重复的add
函数,命名为add2
。Calculator
类现在看起来类似于以下内容:```php <?php class Calculator { /* * @assert (0, 0) == 0 * @assert (0, 1) == 1 * @assert (1, 0) == 1 * @assert (1, 1) == 2 * @assert (1, 2) == 4 / public function add($a, $b) { return $a + $b; } public function add2($a, $b) { return $a + $b; } } ?>
```
-
Right-click on the project node. From the Context menu, select Code Coverage | Collect and Display Code Coverage. By default, the Show Editor Bar is also selected.
-
The editor now has a code coverage editor bar across the bottom. Since code coverage has not been tested, the editor bar reports
0.0%
coverage (it also displays such a percentage after you click on Clear to clear the test results). -
Click on Test to test the opened file or All Tests to run all the tests for the project. The test results are displayed. In addition, the Code Coverage bar tells you what percentages of your total methods have been covered by tests. In the editor window, the covered code is highlighted in green, and the uncovered code is highlighted in red. Check out the following code coverage session:
-
In the Code Coverage bar, click on Report.... The Code Coverage report opens, showing the results of all the tests that were run on your project. Buttons in the bar let you clear the results, run all the tests again, and deactivate code coverage (click on Done).
正如您所看到的,
add2()
方法没有包含在单元测试中,因此报告显示了50%
代码覆盖率,否则它将显示100%
覆盖率。
刚才发生了什么事?
我们已经完成了在 PHPUnit 中使用 NetBeans 代码覆盖特性,因此我们可以确定 PHPUnit 测试没有覆盖哪些单元。因此,当您为代码单元创建 PHPUnit 测试并希望确保所有单元都已被测试覆盖时,可以应用代码覆盖率。但是,预期的代码覆盖率是最大的。
提示
重构代码时重构测试脚本。
使用 Selenium 框架进行测试
Selenium 是一个用于 web 应用程序和自动化浏览器的便携式软件测试框架。它主要用于自动化 web 应用程序,以便跨多个平台进行测试。NetBeans IDE 有一个包含 Selenium 服务器的插件。有了这个插件,您可以在 PHP、web 应用程序或 Maven 项目上运行 Selenium 测试。要在 PHP 上运行 Selenium 测试,您需要在 PHP 环境中安装Testing_Selenium包。
安装硒
由于我们升级了 PEAR 并安装了最新的 PHPUnit,我们应该已经安装了 Testing_Selenium-beta
了。要检查 Selenium 安装,请从终端运行以下命令,您将能够查看已安装的版本:
pear info Testing_Selenium-beta
否则,请运行以下命令安装 Selenium:
pear install Testing_Selenium-0.4.4
动作时间-硒运行测试
让我们通过以下步骤使用 Selenium 运行测试:
- 要安装插件,请打开工具【插件】,然后为 PHP 安装Selenium 模块。
-
In the Projects window, right-click on the project node for your Calculator project. Select New | Other. The New File wizard is opened. Select Selenium and click on Next.
第一次创建 Selenium 测试时,会打开一个对话框,要求您为 Selenium 测试文件设置目录。这应该是 PHPUnit 测试文件的单独目录;否则,Selenium 测试将在每次运行单元测试时运行。运行功能测试(如 Selenium)通常比运行单元测试花费更多的时间。因此,您可能不希望每次运行单元测试时都运行这些测试。
-
Accept the defaults in the Name and Location pages, and click on Finish. The new Selenium test file is opened in the editor and also appears in the Projects window.
-
The Run Selenium Tests item is now added to the project's context menu. Click on this item, and the Selenium test results are displayed in the Test Results window, which is the same as the PHPUnit tests.
您还可以修改 Selenium 服务器的设置。Selenium 服务器作为新服务器添加到服务选项卡中。
刚才发生了什么事?
我们刚刚使用 Selenium PHP 应用程序测试框架进行了测试。它通过多种操作系统、浏览器和编程语言为开发人员提供测试支持,并允许记录、编辑和调试测试。简单地说,这是测试人员的完整测试解决方案。您可以使用 Selenium 通过不断演化的代码结构来演化测试。该软件基于 PHPUnit 框架,并继承了其大部分功能。
注
您可以从这里了解更多有关硒测试的信息:http://seleniumhq.org/ 。
突击测验-单元测试和代码覆盖率
- 什么是单元测试?
- 测试代码中最小的可测试部分
- 测试类的各个方法
- 测试,在哪里知道输入,输出是什么
- 所有这些
- 哪一个断言将通过两个数字相减的测试?
@assert (0, 0) == 0
@assert (2, 3) == -1
@assert (4, 2) == 3
@assert (5, 1) == 4
- 如果在一个由单个方法组成的类中测试单元时通过了六个测试,但有四个测试失败,那么代码覆盖率是多少?
60%
50%
100%
40%
- 哪个不是测试框架 Selenium 的特性?
- 自动化浏览器
- 通过手动测试发现遗漏的缺陷
- 观察表情
- 测试用例执行的无限迭代
进行英雄式学习测试
一个单元测试通常涵盖一个函数或方法,并且可以依赖于其他单元测试。现在,在的帮助下,使用 @depends
注释来表示单元测试依赖关系和实践 http://www.phpunit.de/manual/current/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.test-dependencies。
注
NetBeans IDE 键盘快捷键调试测试见附录。
总结
在本章中,我们学习了使用 NetBeans 调试和测试 PHP 应用程序。IDE 已经以一种有效的方式与那些调试和测试工具集成在一起。此外,对于自动化测试,生成的脚本使过程变得轻松。
具体而言,我们的重点是:
- 各种操作系统上的 XDebug 配置
- 使用 NetBeans 和 XDebug 运行调试会话
- 安装 PHPUnit
- 使用 PHPUnit 的单元测试
- 使用 PHPUnit 和 NetBeans 的代码覆盖率
- 使用 NetBeans 介绍 Selenium 测试框架
使用调试和测试工具,生活变得更加轻松。在下一章中,我们将强调源代码和 API 文档,以使源代码更易于理解。
版权属于:月萌API www.moonapi.com,转载请注明出处