TP5单元测试
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单元测试的更多相关文章
- PHPUnit简介及使用(thinkphp5的单元测试安装及使用)
PHPUnit简介及使用(thinkphp5的单元测试安装及使用) 一.总结 一句话总结:直接google这个phpunit(how to use phpunit),然后去官网看使用样例和手册,那些英 ...
- TP5学习基础二:目录结构、URL路由、数据操作
一.安装1.使用git或者composer(composer update)进行实时更新,区别在于git不会清空核心框架目录而composer会清空.2.使用官网打包好的TP压缩包(解压即可用)-&g ...
- C#,单元测试
C#,单元测试入门(以下内容可能来自网络) 一.什么叫单元测试(unit testing)? 是指对软件中的最小可测试单元进行检查和验证.对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体 ...
- C#单元测试(转)
C#,单元测试入门(以下内容可能来自网络) 一.什么叫单元测试(unit testing)? 是指对软件中的最小可测试单元进行检查和验证.对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体 ...
- Intellij idea添加单元测试工具
1.idea 版本是14.0.0 ,默认带有Junit,但是不能自动生成单元测试,需要下载JunitGererator2.0插件 2.Settings -Plugins,下载 JunitGenerat ...
- Python的单元测试(二)
title: Python的单元测试(二) date: 2015-03-04 19:08:20 categories: Python tags: [Python,单元测试] --- 在Python的单 ...
- Python的单元测试(一)
title: Python的单元测试(一) author: 青南 date: 2015-02-27 22:50:47 categories: Python tags: [Python,单元测试] -- ...
- javascript单元测试框架mochajs详解
关于单元测试的想法 对于一些比较重要的项目,每次更新代码之后总是要自己测好久,担心一旦上线出了问题影响的服务太多,此时就希望能有一个比较规范的测试流程.在github上看到牛逼的javascript开 ...
- 使用NUnit为游戏项目编写高质量单元测试的思考
0x00 单元测试Pro & Con 最近尝试在我参与的游戏项目中引入TDD(测试驱动开发)的开发模式,因此单元测试便变得十分必要.这篇博客就来聊一聊这段时间的感悟和想法.由于游戏开发和传统软 ...
随机推荐
- VSCode - Beautify插件配置
注: 本文摘自 黑火巨雷 - 简书 1. 在工作目录下建立.jsbeautifyrc文件 官方文档 { "brace_style": "none,preserve-inl ...
- git学习记录--标签随笔
创建标签: 命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id: git tag -a <tagname> -m "b ...
- Schema学习【一】
XML Schema 是基于 XML 的 DTD 替代者. 什么是 XML Schema? XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD. XML Schema: 定义 ...
- k8s安装之grafana.yaml
这个作展示,够用. 为了使用nginx统一管理, 这里将grafana放在子目录下. - name: GF_SERVER_ROOT_URL value: "%(protocol)s://% ...
- 微信小程序~性能
(1)优化建议 setData setData 是小程序开发中使用最频繁的接口,也是最容易引发性能问题的接口.在介绍常见的错误用法前,先简单介绍一下 setData 背后的工作原理. 工作原理 小程序 ...
- 转 C#关于DateTime得到的当前时间的格式和用法
DateTime.Now.ToShortTimeString() DateTime dt = DateTime.Now; dt.ToString();//2005-11-5 13:21:25 dt.T ...
- 《AlwaysRun!》第七次作业:团队项目设计完善&编码
项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-da ...
- vue和react原理性知识点
Vue组件如何通信? computed和watch有什么区别? Vue是如何实现双向绑定的? Proxy与Object.defineProperty的优劣对比? 你是如何理解Vue的响应式系统的? 既 ...
- flask框架下读取mysql数据 转换成json格式API
研究了一天 因为需要从数据库拿数据然后转换成json的格式 expose出去为 API 发现一条数据是容易,两条以上我居然搞了这么久 好歹出来了 先贴一下 后面更新 mysql的操作 比较容易了htt ...
- 【CSS3】 新增属性
一. box-shadow(阴影效果) 使用: box-shadow: 20px 10px 0 #000; -moz-box-shadow: 20px 10px 0 #000; -webkit-box ...