文档章节

写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
粉丝 17
博文 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

没有更多内容

加载失败,请刷新页面

加载更多

浅谈Redux中间件的实践

最近项目前端开发框架采用React+Redux进行实现,但是,如何异步访问服务器端,以及想要在开发过程中进行状态树日志的输出,所以怎么才能解决这两个问题? 采用Redux中间件 为什么要使用中间件...

peakedness丶
14分钟前
0
0
大数据教程(8.1)mapreduce核心思想

上一章介绍了hadoop的HDFS文件系统的原理及API使用。本章博主将继续对hadoop的mapreduce编程框架进行分享。 mapreduce原理篇 mapreduce是一个分布式运算程序的编程框架,是用户开发“基于had...

em_aaron
20分钟前
0
0
Vue与Node.js通过socket.io通信的示例

#一、Node中socket.io基础 1、是什么 Socket.IO类库,是在服务器和浏览器之间提供一个共享接口,其可以用于实现以下几种通信方式: HTML5中的WebSocket通信 Flash中使用的WebSocket通信 XHR轮...

前端攻城老湿
25分钟前
1
0
JavaScript的组成 | DOM/BOM

往期回顾 在上一期的《JavaScript的组成 | 核心-ECMAScript 》☜里,我们有说到JavaScript 是由三大部分组成,分别是:核心ECMAScript、文档对象模型-DOM、浏览器对象模型-BOM 那么本期就让我...

我的卡
29分钟前
0
0
三, 跨语言微服务框架 - Istio官方示例(自动注入.请求路由.流量控制.故障注入)

基础的Istio环境已经搭建完成,我们需要开始了解Istio提供作为微服务网格的各种机制,也就是本文标题的自动注入.请求路由.故障注入.流量切换,官方很给力的准备的实例项目也不需要大家自己编写d...

喵了_个咪
31分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部