导航:首页 > 编程语言 > php什么是单元测试

php什么是单元测试

发布时间:2023-01-30 10:03:29

A. php怎样进行单元测试

可以看看phpunit

网页链接

B. 如何 进行 PHP 简单 测试

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

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

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

C. 如何判断报告单元 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(存根,桩点)来孤立你要测试的对象与其所在环境中其他代码的联系。

D. 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 的使用。

E. 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

classHelloModelextendsModel
{
publicfunctionsayHello()
{
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');
_Framework_TestCase{

publicfunctionsetUp(){}

publicfunctiontearDown(){}

}

在TestSayHello中加入测试用例:

publicfunctiontestHelloModel()
{
$hello=D('Hello');
$this->assertTrue($hello->sayHello('Hello')=='Hello');
}

测试Action

修改IndexAction.class.php如下:

<?php
classIndexActionextendsAction
{
publicfunctionindex()
{
$hello=D("Hello");
return$hello->sayHello();
}
}

浏览器访问Index效果:

在TestSayHello中加入测试用例:

publicfunctiontestHelloAction()
{
$hello=newIndexAction();
$this->assertTrue($hello->index()=='Hello');
}

运行效果

运行Test.php效果如下:

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

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

在PHP领域,单元测试的工具主要有 PHPUNIT,PHPUNIT2和SimpleTest三种。
其中PHPUNIT在功能上很简单,不算完善;
PHPUNIT2是专门为PHP5写的单元 测试工具,在结构和功能上都向Junit看齐;
而SimpleTest则是一套非常实用的测试工具,其中的webTest支持对web程序界面的测试,是 Easy最为推荐的一款测试工具。在本文中,我们选择SimpleTest进行介绍。
相关知识:PHPUNIT2也是一款很好的工具,尤其是架构上有很多值得圈点之处,希望将来能有机会在专门的文章中和大家分享。
SimpleTest:就是这么Simple安装SimpleTest很简单,上sf.net上下载一个源码包,然后解压到web目录下就可以使用了,这里就不多说。

G. thinkphp5 怎么使用单元测试

首先安装ThinkPHP5的单元测试扩展,进入命令行,切换到tp5的应用根目录下面,执行(当然你要安装了composer):

composerrequiretopthink/think-testing

官方的5.0版本的扩展库版本号都是1.*,2.0版本均为ThinkPHP5.1版本专用。

由于单元测试扩展的依赖较多,因此安装过程会比较久,请耐心等待。

安装完成后,会在应用根目录下面增加tests目录和phpunit.xml文件。
默认带了一个tests/ExampleTest.php单元测试文件,我们可以直接在命令行下面运行单元测试:

phpthinkunit

请始终使用以上命令进行单元测试,而不是直接用phpunit来运行单元测试。

添加单元测试文件

我们来添加一个新的单元测试文件,单元测试文件为tests/IndexTest.php,内容如下:

<?php
usetestsTestCase;classIndexTestextendsTestCase{

()
{
$this->assertTrue(true);
}

}

注意,单元测试文件中定义的测试类如果不存在冲突,可以不需要使用命名空间。

H. 为什么说单元测试能发现约80%的软件缺陷

不好意思,没看过这个笔试问题,不过经验看来,这个80%有点高,因为:
1.单元测试是开发自己测自己,比较倾向于用合法的数据保证功能的完成
2.开发过程中,有的需求都没有确定,开发没法做单元测试
3.因为各个模块的开发在单元测试的时候都是模拟其他模块的数据来交互的,一旦进入集成和系统测试,会带来大量问题,数据格式不对,数据长度不对,等等,我们不能假设在紧张的项目中,各个组能完整的沟通相互间的接口问题。还有很多是在设计中根本想不到的。
等等

I. 学习测试开发,有没有用能学到什么东西吗

软件测试的门槛相对来说还是比较低的,比起Java、PHP等这些后端开发来说,软件测试需要的代码量少,同时软件测试也是IT技术上手比较容易的,学习难度低。

软件测试前景怎么样,回答是前景很好。软件测试人才缺口大,国内测试人才缺口达到30万之多,且仍在逐年递增,薪资待遇好,一般刚培训出来的软件测试工程师起步薪资都在8千左右,优秀学员年薪达到二十万的都有,发展方向广,软件测试基本各行各业都需要,尤其是IT互联网行业、金融等很吃香的行业。

随着软件行业的日渐成熟,用户体验感、软件安全性越来越受到社会的关注,各大企业对软件测试的重视度都有了明显的抬升。从招聘需求来看,软件测试岗位的招聘量处于明显上升态势,从薪资水平来看,软件测试人员的待遇也是一增再增。

据统计,目前软件测试人才的缺口在30万人以上,IT行业国内外巨头正在加紧争夺软件测试人才,华为曾一次抛出50名软件测试人员的招聘大单,联想、用友、瑞星等企业也纷纷打出高薪招聘软件测试人才的启事。

软件测试人才的需求量还会越来越大

学习什么内容:

一、软件测试的原理

v 软件工程:软件的含义、软件开发过程的特性 、软件生命周期模型、软件管理过程软件质量和质量保证:软件质量就是客户的满意度 、质量的概念、软件质量的内涵、质量管理体系、SQA、SCM、SEPG

v软件测试概念:软件危机、软件测试产生的背景,软件缺陷是什么、软件测试职业发展,软件测试人员应具备的素质和技能、软件测试基本概念、软件测试的目的、软件测试的重要性、软件测试的原则、软件开发与软件测试

v软件测试依据和规范:软件质量标准、软件测试规范、界面规范、编码规范、CMM和ISO9001思想结构体系、CMM VS ISO

二、软件测试的技术

v软件测试技术概述:软件测试的基该方法,黑盒测试、白盒测试、静态测试、动态测试、测试策略

v软件测试流程:软件测试流程、通用测试文档模板 、软件测试的分类、软件包的质量特性

v 单元测试和集成测试:什么是单元测试、单元测试的目标和任务、单元测试方法、调试与评估、什么是集成测试、集成测试目标和任务、集成测试的模式与方法

v 系统测试和验收测试:什么是系统测试,系统测试的目标和任务,系统测试方法,系统测试中工具的应用、什么是验收测试、验收测试的目标、验收测试的过程和主要内容、产品规格说明书的验证

v 特定类型的软件测试:面向对象软件的测试、面向对象软件的特点、面向对象测试的层次与数据流、面向对象的单元测试、面向对象的集成测试 、基于应用服务器的测试、应用服务器的分类和特征、基于Web服务器应用的测试、基于数据库应用服务器的测试、基于J2EE平台的测试、软件本地化测试:什么是软件本地化、软件本地化的翻译问题、软件本地化测试的技术问题、本地化测试的重点

三、软件测试的实践

v测试环境的部署:测试环境的重要性、测试环境的各要素、建立测试实验室、测试环境的维护和管理

v软件测试用例的设计:测试用例来源、测试需求提取、测试用例设计、白盒测试用例设计方法、逻辑覆盖法/基本路径测试法 、黑盒测试用例设计方法、等价类划分法/边界值分析法/因果图法/错误推测法 /功能图法、测试用例的组织和跟踪、使用实际项目实践

v 报告所发现的软件缺陷:软件缺陷的描述 、软件缺陷相关的信息、软件缺陷的处理和跟踪

四、软件测试管理

v 组织和管理测试团队:基于ISO的测试管理体系构成、测试团队的地位和责任、测试团队的构成 、测试团队的管理和发展

五、软件测试人员面临的机会和挑战

v软件测试职位在IT行业的现状

v软件测试职位到底是干什么?

v软件测试行业的背景

v软件测试人员需要具备的基本素质

v软件测试工程师需掌握的技术技能大纲

v软件测试人员后期的发展机会和挑战

阅读全文

与php什么是单元测试相关的资料

热点内容
加密货币容易被盗 浏览:82
苹果平板如何开启隐私单个app 浏览:704
空调压缩机一开就停止 浏览:528
如何下载虎牙app 浏览:847
日语年号的算法 浏览:955
dev里面的编译日志咋调出来 浏览:298
php函数引用返回 浏览:816
文件夹和文件夹的创建 浏览:259
香港加密货币牌照 浏览:838
程序员鼓励自己的代码 浏览:393
计算机网络原理pdf 浏览:752
吃鸡国际体验服为什么服务器繁忙 浏览:94
php中sleep 浏览:490
vr怎么看视频算法 浏览:86
手机app如何申报个人所得税零申报 浏览:694
如何截获手机app连接的ip 浏览:332
冰箱压缩机是否需要电容 浏览:346
python列表每一行数据求和 浏览:276
自己有一台服务器可以玩什么 浏览:658
社会学波普诺pdf 浏览:585