热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

单元测试php怎么用(2023年最新整理)

导读:本篇文章编程笔记来给大家介绍有关单元测试php怎么用的相关内容,希望对大家有所帮助,一起来看看吧。本文目录一览:1、PHP中使用G

导读:本篇文章编程笔记来给大家介绍有关单元测试php怎么用的相关内容,希望对大家有所帮助,一起来看看吧。

本文目录一览:


  • 1、PHP中使用Guzzle进行API测试


  • 2、thinkphp怎么用phpunit写测试用例


  • 3、yii框架里的单元测试怎么使用


  • 4、如何判断报告单元 reporting unit


  • 5、php官方为什么不推荐使用单元测试如phpunit或simpletest


  • 6、如何 进行 PHP 简单 测试

PHP中使用Guzzle进行API测试

本文将介绍 Guzzle , Guzzle 在单元测试中的使用。

来自 Guzzle 中文文档的解释:

使用 composer 安装

或者编辑项目的 composer.json 文件,添加Guzzle作为依赖

执行 composer update

或使用 query 请求参数来声明查询字符串参数:

传入 form_params 数组参数

同Guzzle的安装, 也适用Composer工具。

或者在composer.json文件中声明对phpunit/phpunit的依赖

执行安装

我们在 tests\unit\MyApiTest.php 中定义了两个测试用例

在项目根目录执行命令

通过 Guzzle 强大的功能,可以方便进行API单元测试。大家可以查看 Guzzle 文档,详细了解 Guzzle 的使用。

thinkphp怎么用phpunit写测试用例

测试用例

本例中,根目录的index.php的配置如下:

?php    

define('APP_NAME', 'example');    

define('APP_PATH', '../example/');    

define('APP_PHPUNIT', false);    

define('APP_DEBUG', true);    

require('../ThinkPHP/ThinkPHP.php');    

?

首次访问之后,生成以下目录结构:

在example站点中新建文件夹,命名为“Testcase”。

测试Model

创建HelloModel.class.php:

?php    

     

class HelloModel extends Model    

{    

    public function sayHello()    

    {    

        print 'Hello';    

        return 'Hello';    

    }    

}

在Test文件夹中新建Test.php文件作为PHPUnit,其中注意require ThinkPHP作为初始化框架环境,另外在Think.class.php中,修改

start()函数中,App::run()为 !APP_PHPUNIT App::run();

该区分站点运行与测试用例。

?php    

define('APP_NAME', 'example');    

define('APP_PATH', './../../example/');    

define('APP_PHPUNIT', true);    

require('./../../ThinkPHP/ThinkPHP.php');    

class TestSayHello extends PHPUnit_Framework_TestCase {    

     

    public function setUp() { }    

     

    public function tearDown(){ }    

     

}

在TestSayHello中加入测试用例:

public function testHelloModel()    

{    

    $hello = D('Hello');    

    $this-assertTrue( $hello-sayHello('Hello') == 'Hello');    

}

测试Action

修改IndexAction.class.php如下:

?php    

class IndexAction extends Action    

{    

    public function index()    

    {    

        $hello = D("Hello");    

        return $hello-sayHello();    

    }    

}

浏览器访问Index效果:

在TestSayHello中加入测试用例:

public function  testHelloAction()    

{    

    $hello = new IndexAction();    

    $this-assertTrue($hello-index() == 'Hello');    

}

运行效果

运行Test.php效果如下:

Test通过,至此给ThinkPHP加上了单元测试。

yii框架里的单元测试怎么使用

Yii2是一款非常优秀的php框架,Yii2的官方发行版整合了Codeception测试框架。在使用Yii2框架的项目中,我们可以非常方便地利用Codecep

如何判断报告单元 reporting unit

PHPUnit是一个用PHP编程语言开发的开源,是一个单元测试框架。PHPUnit由Sebastian Bergmann创建,源于Kent Beck的SUnit,是xUnit家族的框架之一。本文将探索PHPUnit,特别介绍自动化单元测试的基本用法。你需要掌握PHP编程语言的基本知识才能继续。

介绍

单元测试是对单独的代码对象进行测试的过程,比如对函数、类、方法进行测试。单元测试可以使用任意一段已经写好的测试代码,也可以使用一些已经存在的测试框架,比如JUnit、PHPUnit或者Cantata++,单元测试框架提供了一系列共同、有用的功能来帮助人们编写自动化的检测单元,例如检查一个实际的值是否符合我们期望的值的断言。单元测试框架经常会包含每个测试的报告,以及给出你已经覆盖到的代码覆盖率。

heiing

heiing

翻译于 4年前

5人顶

顶 翻译得不错哦!

安装

PHPUnit 通常以 PEAR 包,Composer bundle 或是 PHAR 文件形式存在。如果你要安装它,你需要先安装 PHP Code Coverage 依赖。在 PEAR 中,你需要天价 phpunit.de 频道,并通过命令行安装两个包:

PHP Unit Testing with PHPUnit

(注意,在输入时,默认的 XAMPP 的 PEAR 安装已经被破坏:你需要在尝试上面代码之前先安装 PEAR PHAR)。

测试一个简单的类

试试只有单一方法的简单类:

class TruthTeller

{

public function() tellTruth

{

return true;

}

}

是的,现在 tellTruth 方法总是返回 TRUE,那么我们应改怎么通过单元测试确保今后它的返回值不变?

K6F

K6F

翻译于 4年前

4人顶

顶 翻译得不错哦!

使用PHPUnit,每组测试是PHPUnit_Framework_TestCase类的一个扩展类,它提供了常用的功能,如判断。下面是一个对上述tellTruth方法的一个基本测试:

require_once 'PHPUnit/Autoload.php';

require_once 'TruthTeller.class.php';

class TruthTester extends PHPUnit_Framework_TestCase

{

function testTruthTeller()

{

$tt = new TruthTeller();

$this-assertTrue($tt-tellTruth());

}

}

请注意,您需要包括PHPUnit的自动加载器和“被测对象”,在这种情况下的TruthTeller类文件。

我们用剩余的代码要做的就是判断,如果tellTruth方法被调用时,它将返回true。这些判断是PHPUnit的核心 - 它们将决定一个测试是通过还是失败。

Holiday_

Holiday_

翻译于 4年前

2人顶

顶 翻译得不错哦!

如果你启动了命令行提示,切换到你的测试所在目录,运行 phpunit TruthTester (参数是你的测试文件名,去除 .php 扩展名),PHPUnit 将会运行文件中指定的所有它能找到的测试(测试将是名字以 test 开头的所有方法)。

PHP Unit Testing with PHPUnit

如果你回到 TruthTeller 类,并将其方法的返回值改为 FALSE,你讲看到类似下面的信息:

PHP Unit Testing with PHPUnit

这就是单元测试的核心——编写断言并判断是否通过。当先前编写并测试通过的代码开始无法通过时,你就知道有更改的代码对现有代码起了负面影响。

在现实中,你肯定需要处理比上一个更复杂的情况。比如一个常见的测试是检查下面的outputArray方法是否返回了一个特定数据结构的数组。

class ArrayTeller

{

public function outputArray()

{

return array(1,2,3);

}

}

对此方法的一个简单测试可以这样写:

class ArrayTester extends PHPUnit_Framework_TestCase

{

function testArrayTeller()

{

$at = new ArrayTeller();

$result = $at-outputArray(1);

$this-assertInternalType("array", $result);

$this-assertCount(3, $result);

$this-assertEquals(1, $result[0]);

$this-assertEquals(3, $result[2]);

}

}

如你所见,使用PHPUnit进行单元测试时可以在每一行进行多样化的检查:可以检查ArrayTeller返回的是否是一个数组,而非任何其他数据类型;可以检查数组的长度;可以检查数组中的单个值。除这些外,还有其它一些功能的断言,比如如果你需要更复杂的判断,假设要知道一个返回值是否处于两个整数的区间内,只要你能用一个IF语句的结果来表述,你就可以用断言assertTrue来测试结果。可点击随后链接来访问PHPUnit文档中的所有可用断言列表,。

单元测试片面的讲就是编写覆盖被测方法所有预期行为的测试,最好基于规范文档,不过如果你在编写覆盖现有代码的单元测试,将其视为白盒测试的一种形式更有用。如果你知道一个如下的简单切换方法:

class Switcher

{

public function aOrB($switch, $a, $b)

{

if ($switch == TRUE)

{

return $a;

}

else

{

return $b;

}

}

}

… 你就知道需要编写两个测试,分别针对一种情形。但你开始质疑你是如何知道这些的——如果以后方法变为 True 返回 $a,False 返回 $b,其它情形抛出一个异常,理想情况是规范文档中的某处有提及。无论如何,上面方法的测试如下:

class SwitcherTester extends PHPUnit_Framework_TestCase

{

function testSwitchTrue()

{

$switcher = new Switcher();

$result = $switcher-aOrB(TRUE, 1, 2);

$this-assertEquals(1, $result);

}

function testSwitchFalse()

{

$switcher = new Switcher();

$result = $switcher-aOrB(FALSE, 1, 2);

$this-assertEquals(2, $result);

}

}

运行两个测试同在命令行运行 phpunit SwitcherTester 一样简单。

K6F

使用 setUp,简化多个测试

当你的测试需要覆盖越来越多的输入组合及数据设置时,使用函数: setUp 将会非常有帮助。setUp 是 PHPUnit_Framework_TestCase 类中你可以覆写以在类中所有及每个测试运行前运行的代码。(注意,还有一个简单的方法,tearDown,它会在所有测试结束后立即运行——这对关闭 socket 及文件指针很有帮助)

下面是如何精简代码的一个简单的例子。尝试一个依赖一些对象数据何输入的方法。

class DataTeller

{

private $data;

public function __construct($data)

{

$this-data = $data;

}

public function outputData($switch)

{

if ($switch == TRUE)

{

if (!empty($this-data))

return $this-data;

else

return FALSE;

}

else

{

return "switch off";

}

}

}

如果你继续之前幼稚的方法,我们需要编写三个测试,并实例化三个 DataTeller 对象,每个测试一次。然而,通过 setUp,我们可以讲对 DataTellers对象的创建,至少是3个中的两个。只有最后一个测试需要新的 DataTeller 被创建。

class DataTellerTester extends PHPUnit_Framework_TestCase

{

private $dt;

protected $data = "valid data";

function setUp()

{

$this-dt = new DataTeller($this-data);

}

function testOutputArraySwitchOff()

{

$this-assertEquals("switch off", $this-dt-outputData(FALSE));

}

function testOutputArraySwitchOn()

{

$this-assertEquals($this-data, $this-dt-outputData(TRUE));

}

function testOutputArrayEmptySwitchOn()

{

$new_dt = new DataTeller("");

$this-assertEquals(FALSE, $new_dt-outputData(TRUE));

}

}

PHPUnit使用断言来告诉你你所测试的代码是否如你预期那样工作。学到这里,你现在应该已经可以写一些简单的测试来覆盖一些功能相对比较独立的类了。但当要测试一些互相有交互操作的类时,就要面对真正的挑战了。为此,请收听下一次讲解,学习如何为静态类写测试,以及如何使用 mock(模拟对象)和 stubs(存根,桩点)来孤立你要测试的对象与其所在环境中其他代码的联系。

php官方为什么不推荐使用单元测试如phpunit或simpletest

在PHP领域,单元测试的工具主要有 PHPUNIT,PHPUNIT2和SimpleTest三种。

其中PHPUNIT在功能上很简单,不算完善;

PHPUNIT2是专门为PHP5写的单元 测试工具,在结构和功能上都向Junit看齐;

而SimpleTest则是一套非常实用的测试工具,其中的webTest支持对web程序界面的测试,是 Easy最为推荐的一款测试工具。在本文中,我们选择SimpleTest进行介绍。

相关知识:PHPUNIT2也是一款很好的工具,尤其是架构上有很多值得圈点之处,希望将来能有机会在专门的文章中和大家分享。

SimpleTest:就是这么Simple安装SimpleTest很简单,上sf.net上下载一个源码包,然后解压到web目录下就可以使用了,这里就不多说。

如何 进行 PHP 简单 测试

其实我们每天都在做单元测试。你写了一个函数,除了极简单的外,总是要执行一下,看看功能是否正常,有时还要想办法输出些数据,如弹出信息窗口什么的,这,也是单元测试,把这种单元测试称为临时单元测试。

楼上的这些工具太复杂了。

我认为,老师要求的,实际上就是要求每个功能单元都能够带入数据进行验证。报告只要把验证过程写清楚就OK了。

结语:以上就是编程笔记为大家整理的关于单元测试php怎么用的相关内容解答汇总了,希望对您有所帮助!如果解决了您的问题欢迎分享给更多关注此问题的朋友喔~


推荐阅读
  • AndroidJetpackNavigation基本使用本篇主要介绍一下AndroidJetpack组件Navigation导航组件的基本使用当看到Navigation单词的时候应 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • Whatisannotation?annotation的中文意思就是注解,注释的意思。注解也属于一种类型。它是在JavaSE5.0版本中开始引入的概念。它的形式跟接口很类似,不过前 ... [详细]
  • 直击热门考点——结构体内存对齐
    原标题:直击热门考点——结构体内存对齐文章目录前言一、引例 ... [详细]
  • MySQL 的 NULL 值是怎么存储的?
    MySQL 的 NULL 值是怎么存储的? ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 一、申明slice会产生什么1.1申明slice当咱们申明一个slice类型,它理论的值什么?{代码}如上咱们申明了一个[]int的slice切片类型输入如下:{代码 ... [详细]
author-avatar
月獠_189
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有