文档章节

写Laravel测试代码(4)

botkenni
 botkenni
发布于 2017/09/03 22:39
字数 167
阅读 3
收藏 0

在写单元测试时,有时候需要测试A class 的 protected or private method,可以使用 Class Reflection 来做,而不是去改成public,破坏封装

在 laravel 的 abstract TestCase class 中添加一个方法就行:

    /**
     * Call protected or private method of a class.
     *
     * @param object $object      instantiated object that we will run method on.
     * @param string $method_name method name to call
     * @param array  $parameters  array of parameters to pass into method.
     *
     * @return mixed Method return.
     */
    protected function invokeNonPublicMethod($object, string $method_name, ...$parameters)
    {
        $reflection = new ReflectionClass(get_class($object));
        $method     = $reflection->getMethod($method_name);
        $method->setAccessible(true);

        return $method->invokeArgs($object, $parameters);
    }

然后在 test case 中这样写测试就行:

final AccountTest extends TestCase
{
    public function testValue()
    {
        $account = new Account()
        
        // actual
        $values = $this->invokeNonPublicMethod($account, 'privateMethod', [1, 2, 3]);
        // $values = $this->invokeNonPublicMethod($account, 'protectedMethod', [2, 3, 4]);
        
        // assert
        ...
    }

}

© 著作权归作者所有

共有 人打赏支持
botkenni
粉丝 16
博文 405
码字总数 433796
作品 0
西城
程序员
谈谈我第一次如何为 Laravel 贡献源码

起源 办法总比困难多,所以发现问题比解决问题更难得到。 事情的起源是因为在调试一段模型事件时出现的,当时随便往数据库里插入了一段字符串 ,而不是标准的 。然后发现我的模型事件中查找不...

等月人
05/28
0
0
Laravel5.3之PHP反射(Reflection) (上)

说明:Laravel中经常使用PHP的反射特性来设计代码,本文主要学习PHP的反射特性,来提高写代码时的设计质量。PHP提供一套检测的两个工具包:和,类似于探针一样的东西来探测这些一等公民。本文...

botkenni
2016/11/07
29
0
Laravel5.3之函数处理(Function Handling)

说明:Laravel中经常使用PHP的来设计代码,本文主要学习PHP的特性,来提高写代码时的设计质量。PHP提供了一些函数处理操作的内置函数,主要有: Function Handling calluserfuncarray()/callu...

botkenni
2016/11/15
5
0
Laravel之基于PHPStorm编辑器的Laravel开发

引言 本文主要讲述在PHPStorm编辑器中如何使用PHPStorm的Laravel插件和Laravel IDE Helper来开发Laravel程序,结合个人积累的一点经验来说明使用PHPStorm编辑器来开发程序还是很顺手的,内容...

botkenni
2016/10/10
44
0
Laravel Composer Package 开发实战 toastr-for-laravel5

本文原链接来自我的博客,地址: Laravel Composer Package 开发实战 toastr-for-laravel5 在Laravel的文档中有Package Development,对于入门开发人员来说还是比较抽象,因为开发一个包需要了...

Yuansir
2016/01/22
216
0

没有更多内容

加载失败,请刷新页面

加载更多

Access denied for user 'root'@'localhost' 解决流程

ERROR 1698 (28000): Access denied for user 'root'@'localhost' 解决流程 基于debian 9 maridb 10 因为安装 时不知道 密码,所以在管理中下使用 mysqladmin -u root -p password ex(ex为密......

dragon_tech
31分钟前
0
0
nginx 负载均衡

一.配置方式 1.轮询(默认) 优点:实现简单; 缺点:不考虑每台服务器处理能力 2.权重 weight默认是1。如果有多个配置权重的节点,比较相对值。 15:10,只代表访问8080端口的概率是访问908...

imbiao
54分钟前
1
0
jQuery学习笔记180923

jQuery 操作 CSS jQuery 拥有若干进行 CSS 操作的方法。我们将学习下面这些: addClass() - 向被选元素添加一个或多个类 removeClass() - 从被选元素删除一个或多个类 toggleClass() - 对被选...

颖伙虫
今天
2
0
[python] colorama 模块 - 改变控制台输出文本的颜色

除了使用 PyQt 这样的图形化开发框架外,基本上 python 程序都是跑在控制台中的。很多时候,单纯使用黑白的文字不能很好地突出我们要显示的信息。有时候我们需要将错误的提示使用红色标注,而...

cometeme
今天
3
0
Makefile 学习 2 - 基于若干 Blog 的汇总

基于若干 Blog 汇总的 makefile 教程 陈皓 https://blog.csdn.net/haoel/article/details/2886 Makefile 进阶 1. Makefile 中的内容 显式规则。显式规则说明了,如何生成一个或多的的目标文件...

公孙衍
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部