tp5版本: 5.0.24

单元测试版本:1.*

1. 安装单元测试扩展:

composer require topthink/think-testing .*

2.安装完毕,运行 php think unit 出现问题

[think\exception\ErrorException]
The each() function is deprecated. This message will be suppressed on further calls

php7.2版本将each()方法废除,项目中使用each()的地方都会出现以上的错误

解决:将each()替换成foreach()

while (list($key, $val) = each($para)) {  }  改成   foreach ($para as $key => $val) {  }

配置环境变量中的PATH参数:

这时候将E:\phpStudy\PHPTutorial\php\php-5.6.27-nts目录中 php.exe 复制一份 php56.exe,在命令行就可以使用 php -v = php7.2 使用php56 -v = php5.6 的了,当然也可以同理使用 php71 -v = php7.1

3. 问题解决了,现在可以重新执行 php71 think unit 了

执行代码:

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2015 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: yunwuxin <448901948@qq.com>
// +----------------------------------------------------------------------
namespace tests; class ExampleTest extends TestCase
{ // public function testBasicExample()
// {
// $this->visit('/')->see('ThinkPHP');
// } // 测试查询模型返回,查询到数据则返回ok,否则返回失败
// public function testModel()
// {
// $this->assertNotNull(User::getOne('123'));
// }
// 测试方法返回,如果结果和输入的值相同返回ok,否则返回失败
public function testMethod()
{
$this->assertEquals(4,$this->add(1,3));
}
// 方法
public function add($a,$b)
{
return $a+$b;
}
}

执行结果:

E:\code\tp\tp_5_0_24>php71 think unit
PHPUnit 4.8.36 by Sebastian Bergmann and contributors. . Time: 124 ms, Memory: 4.00MB OK (1 test, 1 assertion)

再试试测试,如果不通过的结果:

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2015 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: yunwuxin <448901948@qq.com>
// +----------------------------------------------------------------------
namespace tests; class ExampleTest extends TestCase
{ // public function testBasicExample()
// {
// $this->visit('/')->see('ThinkPHP');
// } // 测试查询模型返回,查询到数据则返回ok,否则返回失败
// public function testModel()
// {
// $this->assertNotNull(User::getOne('123'));
// }
// 测试方法返回,如果结果和输入的值相同返回ok,否则返回失败
public function testMethod()
{
$this->assertEquals(5,$this->add(1,3));
}
// 方法
public function add($a,$b)
{
return $a+$b;
}
}
E:\code\tp\tp_5_0_24>php71 think unit
PHPUnit 4.8.36 by Sebastian Bergmann and contributors. F Time: 131 ms, Memory: 4.00MB There was 1 failure: 1) tests\ExampleTest::testMethod
Failed asserting that 4 matches expected 5. E:\code\tp\tp_5_0_24\vendor\phpunit\phpunit\src\Framework\Constraint\IsEqual.php:137
E:\code\tp\tp_5_0_24\vendor\phpunit\phpunit\src\Framework\Assert.php:2255
E:\code\tp\tp_5_0_24\vendor\phpunit\phpunit\src\Framework\Assert.php:513
E:\code\tp\tp_5_0_24\tests\ExampleTest.php:29
E:\code\tp\tp_5_0_24\vendor\phpunit\phpunit\src\Framework\TestCase.php:908
E:\code\tp\tp_5_0_24\vendor\phpunit\phpunit\src\Framework\TestCase.php:768
E:\code\tp\tp_5_0_24\vendor\phpunit\phpunit\src\Framework\TestResult.php:612
E:\code\tp\tp_5_0_24\vendor\phpunit\phpunit\src\Framework\TestCase.php:724
E:\code\tp\tp_5_0_24\vendor\phpunit\phpunit\src\Framework\TestSuite.php:722
E:\code\tp\tp_5_0_24\vendor\phpunit\phpunit\src\Framework\TestSuite.php:722
E:\code\tp\tp_5_0_24\vendor\phpunit\phpunit\src\TextUI\TestRunner.php:440
E:\code\tp\tp_5_0_24\vendor\phpunit\phpunit\src\TextUI\Command.php:149
E:\code\tp\tp_5_0_24\vendor\topthink\think-testing\src\command\Test.php:42
E:\code\tp\tp_5_0_24\thinkphp\library\think\console\Command.php:175
E:\code\tp\tp_5_0_24\thinkphp\library\think\Console.php:674
E:\code\tp\tp_5_0_24\thinkphp\library\think\Console.php:242
E:\code\tp\tp_5_0_24\thinkphp\library\think\Console.php:185
E:\code\tp\tp_5_0_24\thinkphp\library\think\Console.php:145
E:\code\tp\tp_5_0_24\thinkphp\console.php:20 FAILURES!
Tests: 1, Assertions: 1, Failures: 1.

测试函数,更多测试请看帮助文档

assertTrue 为判断是否真
assertFalse 为判断是否假
assertGreaterThan为判断是否大于
assertLessThanOrEqual判断是否小于或等于
assertEquals为判断是否相等

tp5单元测试使用帮助文档 http://www.kancloud.cn/manual/thinkphp5/182511

最后可能存在很多单元测试错误,可以将错误结果重定向到一个日志文件中:

php71 think unit > unit.error.txt

一些问题

问题1:如果tp框架和app不再同一级目录,我们该怎么办呢?

1. 重写一个cmd文件,内容如下:

#!/usr/bin/env php
<?php // 定义项目路径
define('APP_PATH', __DIR__ . '/application/');
// 定义配置文件目录和应用目录同级
define('CONF_PATH', __DIR__ . '/config/');
// 定义第三方项目文件根目录
define('VENDOR_PATH', __DIR__ . '/tp_5_0_24/vendor/');
// 扩展类库目录
define('EXTEND_PATH', __DIR__ . '/extend/');
// 加载框架引导文件
require __DIR__.'/tp_5_0_24/thinkphp/console.php';

2. 将 tp_5_0_24/phpunit.xml 文件复制到当前目录

<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false"
syntaxCheck="false">
<testsuites>
<testsuite name="Application Test Suite">
<directory>./tests/</directory>
</testsuite>
</testsuites>
<filter>
<whitelist>
<directory suffix=".php">application/</directory>
</whitelist>
</filter>
</phpunit>

3. 新建目录 tests

运行

php71 cmd unit

TP5单元测试的更多相关文章

  1. PHPUnit简介及使用(thinkphp5的单元测试安装及使用)

    PHPUnit简介及使用(thinkphp5的单元测试安装及使用) 一.总结 一句话总结:直接google这个phpunit(how to use phpunit),然后去官网看使用样例和手册,那些英 ...

  2. TP5学习基础二:目录结构、URL路由、数据操作

    一.安装1.使用git或者composer(composer update)进行实时更新,区别在于git不会清空核心框架目录而composer会清空.2.使用官网打包好的TP压缩包(解压即可用)-&g ...

  3. C#,单元测试

    C#,单元测试入门(以下内容可能来自网络) 一.什么叫单元测试(unit testing)? 是指对软件中的最小可测试单元进行检查和验证.对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体 ...

  4. C#单元测试(转)

    C#,单元测试入门(以下内容可能来自网络) 一.什么叫单元测试(unit testing)? 是指对软件中的最小可测试单元进行检查和验证.对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体 ...

  5. Intellij idea添加单元测试工具

    1.idea 版本是14.0.0 ,默认带有Junit,但是不能自动生成单元测试,需要下载JunitGererator2.0插件 2.Settings -Plugins,下载 JunitGenerat ...

  6. Python的单元测试(二)

    title: Python的单元测试(二) date: 2015-03-04 19:08:20 categories: Python tags: [Python,单元测试] --- 在Python的单 ...

  7. Python的单元测试(一)

    title: Python的单元测试(一) author: 青南 date: 2015-02-27 22:50:47 categories: Python tags: [Python,单元测试] -- ...

  8. javascript单元测试框架mochajs详解

    关于单元测试的想法 对于一些比较重要的项目,每次更新代码之后总是要自己测好久,担心一旦上线出了问题影响的服务太多,此时就希望能有一个比较规范的测试流程.在github上看到牛逼的javascript开 ...

  9. 使用NUnit为游戏项目编写高质量单元测试的思考

    0x00 单元测试Pro & Con 最近尝试在我参与的游戏项目中引入TDD(测试驱动开发)的开发模式,因此单元测试便变得十分必要.这篇博客就来聊一聊这段时间的感悟和想法.由于游戏开发和传统软 ...

随机推荐

  1. Java8 stream用法-备忘录

    1. 如何使用匹配模式 List<String> strs = Arrays.asList("a", "a", "a", &qu ...

  2. 【转】常见的tcp/ip协议的知识

    1.tcp/ip协议的层数 左图是osi 7层模型,右图是tcp/ip 4层模型.二者对应关系如上. 2.socket中TCP的三次握手建立连接详解 我们知道tcp建立连接要进行“三次握手”,即交换三 ...

  3. [TI-DSP]sysbios的swi

    SWI: SoftWare Interrupt软件中断 1. 软件中断具有优先级,SWI要一直运行到结束, 2. swi用于事件随机出现,但时间又不是那么急切的情况,hwi处理时间一般在us级,swi ...

  4. SELinux 权限设置

    SELinux 权限设置 一.SELinux简介 SELinux全称是Security Enhanced Linux,由美国国家安全部(National Security Agency)领导开发的GP ...

  5. Minio对象存储

    目录 Minio对象存储 1.概述 2.功能特性 3.2.多节点 3.3.分布式 4.分布式minio集群搭建 4.1.集群规划 4.3.编写集群启动脚本(所有节点) 4.4.编写服务脚本(所有节点) ...

  6. Docker容器化技术(下)

    Docker容器化技术(下) 一.Dockerfile基础命令 1.1.FROM - 基于基准镜像 FROM centos #制作基准镜像(基于centos) FROM scratch #不依赖任何基 ...

  7. java 图片base64互转

    public class ImgBase64 { public static void main(String[] args) //测试 { String strImg = GetImageStr() ...

  8. 渗透之路基础 -- 跨站伪造请求CSRF

    漏洞产生原因及原理 跨站请求伪造是指攻击者可以在第三方站点制造HTTP请求并以用户在目标站点的登录态发送到目标站点,而目标站点未校验请求来源使第三方成功伪造请求. XSS利用站点内的信任用户,而CSR ...

  9. 小白怎么用最短时间高效的学习Python?

    之所以写这篇文章,在标题里已经表达得很清楚了.做技术的人都知道,时间就是金钱不是一句空话,同一个技术,你比别人早学会半年,那你就能比别人多拿半年的钱.所以有时候别人去培训我也不怎么拦着,为什么?因为培 ...

  10. jdk1.6文档官方下载资源

    JDK1.6官方下载_JDK6官方下载地址:http://www.java.net/download/jdk6/6u10/promoted/b32/binaries/jdk-6u10-rc2-bin- ...