PHP单元测试-保障代码正确运行的护卫神

代码能否正确运行是应用的关键,如何保证代码的运行就成为至关重要的事情,“对付坦克的最好工具就是另外一台坦克”,保证代码的正确运行就是使用代码来保证,软件的的需求是变动的,很难保证这一次的改动,会不会将引起上次需求的什么变化。如果是测试人员发现了可以修改,但是如果部署到线上,引起的问题就会严重的。
单元测试就是提供一些条件,这些条件将产生一定的结果,如果结果不符就不能通过测试,不能通过测试产生的原因就是:测试代码有问题或者程序代码有问题。就需要去检查具体的原因。
引入单元测试产生的最直接的结果就是代码量要比以前多,二测试代码的管理问题,三,测试条件的更新问题,但是这些问题在保证代码质量面前都显示不是太重要。
PHP一般情况下用来做服务器后端资源的操作,比如说数据的读出与写入,用户的注册与消费都记录在数据库中。所以对php业务逻辑的测试就显的非常重要。
PHP的单元测试工具是PHPUNIT,它属于XUNIT的类工具,PHPUNIT的部署方法有两个,一种是通过composer进行安装,一种是下载phar包进行安装
单元测试命令是phpunit Test.php,然后根据显示的信息进行判断是否通过测试(在命令行下)。就是这样简单

PHPUNIT的安装方式大体上分为两种,composer安装与phar安装这两种
composer的安装方式比较简单使用方法:  composer require --dev phpunit/phpunit ^6.1

或者使用phar的方式来安装,也比较简单,phar相当于一个压缩包,这个压缩包是需要依赖php才可以运行的,所以如果机器上有php的话,可以新建一个phpunit.bat文件,并把这个文件 的位置加入到路径中这样就可以直接的输入phpunit 命令了,当然也可以不建立这样的bat文件,但是每次做调试的时候,都得带上php  phpunit.phar  **文件名,

bat文件内容类似这样

@ECHO OFF
setlocal DISABLEDELAYEDEXPANSION
SET BIN_TARGET=%~dp0/../phpunit/phpunit/phpunit
php "%BIN_TARGET%" %*
 
 
 或者phpunit.cmd也可以的
 echo @php "%~dp0phpunit.phar" %* > phpunit.cmd
 

在使用phpunit做开的过程中,一定要注意phpunit的版本,因为不同版本的phpunit的测试基类是不一样的,例如phpunit6.1以上版本

use PHPUnit\Framework\TestCase;
class StackTest extends TestCase
{

}

phpunit5的测试基类就是PHPUnit_Framework_TestCase
出现找不到类库的时候,首先看一下phpunit的基类的版本是否对应,然后再检查代码

对于业务类型的测试来说,业务之间存在着关联关系,比如说用户登录之后取得凭据,然后带着凭据去访问业务系统,PHPUnit使用
 @depends 标注来表达依赖关系

<?php
use PHPUnit\Framework\TestCase;
class StackTest extends TestCase
{
    public function testEmpty()
    {
        $stack = [];
        $this->assertEmpty($stack);
        return $stack;
    }
    /**
     * @depends testEmpty
     */
    public function testPush(array $stack)
    {
        array_push($stack, 'foo');
        $this->assertEquals('foo', $stack[count($stack)-1]);
        $this->assertNotEmpty($stack);
        return $stack;
    }
    /**
     * @depends testPush
     */
    public function testPop(array $stack)
    {
        $this->assertEquals('foo', array_pop($stack));
        $this->assertEmpty($stack);
    }
}
?>
时间: 2024-10-29 04:56:27

PHP单元测试-保障代码正确运行的护卫神的相关文章

js代码放到浏览器正确运行,放到ready里面不能正确运行

问题描述 js代码放到浏览器正确运行,放到ready里面不能正确运行 function outpic() { var outs = $('.out') for (i=0;i<outs.length;i++){ var inputText = outs[i].innerText; try { $('.out')[i].innerHTML = AnalyticEmotion(inputText); }catch(err) { console.log('x') outpic() } } } outpi

线程-请问为什么第二段代码无法正确运行?

问题描述 请问为什么第二段代码无法正确运行? package threadlearning; public class BankThread { public static void main(String[] args) { // TODO Auto-generated method stub ChuHu ch1=new ChuHu(); ChuHu ch2=new ChuHu(); Thread t1=new Thread(ch1,"aaa"); Thread t2=new Thr

编程-修改了下代码就运行出错了,怎么回事?

问题描述 修改了下代码就运行出错了,怎么回事? #include<iostream> using namespace std; struct list { int data; struct list *next; }; class Stack { struct list *ptr; public: Stack() { ptr=NULL; } void push(int x)//进栈成员函数 { struct list *newnode=new struct list; newnode->

jsp上传文件,为什么一直报servlet异常,在别个电脑上面却可以正确运行

问题描述 jsp上传文件,为什么一直报servlet异常,在别个电脑上面却可以正确运行 <%@ page contentType=""text/html; charset=GBK""%><%@ page import=""java.io.*""%><%@ page import=""java.util.*""%><%@ page import=&

导入一个myeclipse项目本来正确的代码出错,求大神讲解

问题描述 导入一个myeclipse项目本来正确的代码出错,求大神讲解 做一个项目我myeclipse的配置jdk1.7的 ,不是一个人做,在导入项目后报出的错误很难理解,一个 ); 号错误,一直不知道怎么回事. 如图:为了与项目配置一致,我特意将jdk换成1.6的并且重新配置了环境变量,但是代码莫名其妙的报错,而且还不是全报错,是有的java类报错,有的配置文件报错. 解决方案 如果jar包确定导入的话,src里面错,有可能是由于编码问题,你看System语句有咩有乱码的,webroot里js

自己写了一个关于java UDP传输文件的代码,运行不了,没有错误,不知道哪里出问题了,求助!

问题描述 自己写了一个关于java UDP传输文件的代码,运行不了,没有错误,不知道哪里出问题了,求助! 发送端: import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream

编程-我这代码怎么运行出这样的结果?

问题描述 我这代码怎么运行出这样的结果? 计算机代码编程培训"> 解决方案 问题应该出在printstudent函数的传递参数i上,我在visual c++上测试了一下,如果是将结构体数据直接赋值的话,输出没有问题: struct Student { char name[20]; int age; struct Score score; }stu[2]= {"hkx",20,{95,92,90},"zl",19,{99,98,97}}; 但是如果是在

《Python高性能编程》——2.13 在优化期间进行单元测试保持代码的正确性

2.13 在优化期间进行单元测试保持代码的正确性 如果你不对你的代码进行单元测试,那么从长远来看你可能正在损害你的生产力.Ian(脸红)十分尴尬地提到有一次他花了一整天的时间优化他的代码,因为嫌麻烦所以他禁用了单元测试,最后却发现那个显著的速度提升只是因为他破坏了需要优化的那段算法.这样的错误你一次都不要犯. 除了单元测试,你还应该坚定地考虑使用coverage.py.它会检查有哪些代码行被你的测试所覆盖并找出那些没有被覆盖的代码.这可以让你迅速知道你是否测试了你想要优化的代码,那么在优化过程中

c++-C#与C++位图保存方式的区别是什么?如何将C#中位图buffer正确传到C++代码中?求大神指导

问题描述 C#与C++位图保存方式的区别是什么?如何将C#中位图buffer正确传到C++代码中?求大神指导 C#中位图保存方式与C++中位图保存方式的区别是什么?如何将C#中位图buffer正确传到C++代码中?求大神指导 解决方案 C++中位图分为32/24/16位的三种位图数据存储方式,很多时候C++中主要使用32位和24位,如果你没有特别声明的话.C#中的位图 也多数是32位的.这些所谓的32位或者24位说的是位图中一个像素用多少位来表示,一个像素一般包含RGB三基色,也就是红(red)