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. Linux实验:ssh免密码配置

    [实验目的]    1)了解ssh工具的作用    2)熟悉ssh配置过程    3)理解ssh原理[实验原理]    SSH是目前比较可靠的专为远程登录会话和其他网络服务提供安全的协议.不同主机之间 ...

  2. CasPHP 便捷简单的 ThinkPHP 框架

    便捷简单的 PHP 框架,自适应后台管理界面 Convenient and succinct(便捷的 简明的;言简意赅的) 核心框架:framework: 5.1.28助手函数:think-helpe ...

  3. OPENWRT使用华为 E353/E3131的4G转WIFI路由器作为WAN接口上网(笔记)

    参考文档: http://www.yizu.org/archives/721/ 原来使用Hilink模式真的很简单 1.安装一些包: opkg install kmod-usb-net-rndis k ...

  4. vuex传值的使用

    1.导入vuex import Vuex from 'vuex' Vue.use(Vuex); 2.创建store实例 let store = new Vuex.Store({ state:{ cou ...

  5. 51nod 2381 个人所得税

    牛牛已知每月的税前收入,他想知道在新个税下,税收后收入是多少?个税计算方法是这样的: 综合所得金额 - 新起征点5000元 = 应纳税所得额 其中 综合所得金额 就是税前收入,(你可以忽略五险一金,专 ...

  6. 《BUG创造队》作业9:【Beta】冲刺 Scrum meeting 2

    项目 内容 这个作业属于哪个课程 2016级软件工程 这个作业的要求在哪里 实验十三 团队作业9:Beta冲刺与团队项目验收 团队名称 BUG创造队 作业学习目标 (1)掌握软件黑盒测试技术:(2)学 ...

  7. 前端知识总结--2 js部分

    1. JavaScript的『预解释』与『变量提升』 先看以下代码输出啥? var a= 1; function f() { console.log(a); var a = 2; } f(); 首先答 ...

  8. (一)WCF基础

    我们近期在做项目的时候用到了WCF,之前已经看了部分视频,对于WCF有了一定的了解,但仅限于能够根据搭建好的框架使用WCF,还不了解.所以就进行了研究,这样既有实践也能增加理论,二者结合,使用起来更胜 ...

  9. CheckList 如何梳理可减少上线的验证时间(总结篇)

    对CheckList的执行发起的思考? (1)功能越来越多,CheckList越补充越多,执行CheckList时间越来越长,如何减少上线的验证时间?(2)减少上线验证的时间外,如何保证质量?上线后少 ...

  10. 2019ICPC徐州网络赛 A.Who is better?——斐波那契博弈&&扩展中国剩余定理

    题意 有一堆石子,两个顶尖聪明的人玩游戏,先取者可以取走任意多个,但不能全取完,以后每人取的石子数不能超过上个人的两倍.石子的个数是通过模方程组给出的. 题目链接 分析 斐波那契博弈有结论:当且仅当石 ...