TP5单元测试

tp5版本: 5.0.24

单元测试版本:1.*

1. 安装单元测试扩展:

composer require topthink/think-testing 1.*

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

[thinkexceptionErrorException]
  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:phpStudyPHPTutorialphpphp-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	p	p_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	p	p_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) testsExampleTest::testMethod
Failed asserting that 4 matches expected 5.

E:code	p	p_5_0_24vendorphpunitphpunitsrcFrameworkConstraintIsEqual.php:137
E:code	p	p_5_0_24vendorphpunitphpunitsrcFrameworkAssert.php:2255
E:code	p	p_5_0_24vendorphpunitphpunitsrcFrameworkAssert.php:513
E:code	p	p_5_0_24	estsExampleTest.php:29
E:code	p	p_5_0_24vendorphpunitphpunitsrcFrameworkTestCase.php:908
E:code	p	p_5_0_24vendorphpunitphpunitsrcFrameworkTestCase.php:768
E:code	p	p_5_0_24vendorphpunitphpunitsrcFrameworkTestResult.php:612
E:code	p	p_5_0_24vendorphpunitphpunitsrcFrameworkTestCase.php:724
E:code	p	p_5_0_24vendorphpunitphpunitsrcFrameworkTestSuite.php:722
E:code	p	p_5_0_24vendorphpunitphpunitsrcFrameworkTestSuite.php:722
E:code	p	p_5_0_24vendorphpunitphpunitsrcTextUITestRunner.php:440
E:code	p	p_5_0_24vendorphpunitphpunitsrcTextUICommand.php:149
E:code	p	p_5_0_24vendor	opthink	hink-testingsrccommandTest.php:42
E:code	p	p_5_0_24	hinkphplibrary	hinkconsoleCommand.php:175
E:code	p	p_5_0_24	hinkphplibrary	hinkConsole.php:674
E:code	p	p_5_0_24	hinkphplibrary	hinkConsole.php:242
E:code	p	p_5_0_24	hinkphplibrary	hinkConsole.php:185
E:code	p	p_5_0_24	hinkphplibrary	hinkConsole.php:145
E:code	p	p_5_0_24	hinkphpconsole.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
原文地址:https://www.cnblogs.com/jiangxiaobo/p/11050168.html