PHPUnit Mock 测试

本文介绍了 PHPUnit Mock 测试。

假设 foo 函数调用了 bar 函数,那么在对 foo 函数进行单元测试会有两个问题:

foo 函数依赖于 bar 函数的结果,那么在对 foo 进行单元测试的时候必然会引入 bar ,那么这样子单元测试就没意义了,如果测试不通过,那么无法保证 bug 出在 foo 还是 bar。

bar 函数可能在测试环境不可执行,那么 foo 无法获取 bar 的执行结果,从而无法对 foo 进行单元测试。

Mock 测试就是为了解决上面的问题而出现的,使用 Mock 我们可以虚拟出一个 bar 的调用,并且假设 bar 调用返回结果。如果还是听不懂,上一段代码就知道了。

class MockTest extends \PHPUnit\Framework\TestCase {
	public function testGet()
	{  
		$stub = $this->createMock(\App\UserService::class);     //1
		$stub->method('get')->willReturn(3); 					//2
		$this->assertEquals(3,$stub->get(1));  					//3
	}
}

上面的测试函数就使用到了 Mock,一行一行代码来分析:

第一行创建了一个虚拟的 UserService 对象。

第二行假设 UserService 中的 get 函数的返回值为 3。

第三行调用 $stub->get(1) 不会真的去执行 get 函数,而是根据第二行的 willReturn 函数直接返回 3。

参考链接

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏DT乱“码”

jQuery封装的AJAX使用

jQuery 中的 Ajax jQuery为我们提供了更强大的Ajax封装 $.ajax({}) 可配置方式发起Ajax请求 $.get() 以GET方式发起A...

3166
来自专栏更流畅、简洁的软件开发方式

分页解决方案 之 数据访问函数库——另类的思路、另类的写法,造就了不一样的发展道路。

    如何访问数据库?一个老掉牙的问题,方法多了去了,什么直接使用ado.net、使用SQLHelp、使用微软的企业库、使用ORM、使用LinQ to SQL...

2458
来自专栏前端新视界

关于 devbridge-autocomplete 插件多选操作的实现方法

目前据我所知最好用的 autocomplete 插件就是 jquery-ui 的 autocomplete 以及 devbridge 的 autocomplet...

2098
来自专栏我的博客

tp3.1.2缓存,日志,调试,模板,标签,视图

1.模板 默认在tpl目录下 默认后缀是.html,可以通过TMPL_TEMPLATE_SUFFIX来配置 如果启用分组,那么模板可能在tpl/分组名/目...

3693
来自专栏IT技术精选文摘

Java并发入门指南

关于Java并发 从创建起,Java已经支持核心的并发概念,如线程和锁。本指南帮助Java开发人员使用多线程程序来了解核心并发概念以及如何应用它们。本指南涵盖...

2269
来自专栏禅林阆苑

vim按键整理 【原创】

vim按键整理 Write By CS逍遥剑仙 我的主页: www.csxiaoyao.com GitHub: github.com/csxi...

35810
来自专栏pangguoming

tomcat 用AXIS2发布WebService 网站的方法

Axis2+tomcat7.0 实现webService 服务端发布与客户端的调用。   Aixs2开发webService的方法有很多,在此只介绍一种比较简单...

5386
来自专栏编程坑太多

springboot(18)common-boot

1554
来自专栏linux驱动个人学习

Linux进程启动过程分析do_execve(可执行程序的加载和运行)---Linux进程的管理与调度(十一)

我们前面提到了, fork, vfork等复制出来的进程是父进程的一个副本, 那么如何我们想加载新的程序, 可以通过execve来加载和启动新的程序。

3903
来自专栏小白的技术客栈

两个微型的函数例子

hello小伙伴们大家好,还记得昨天的函数参数的文章吗?你get到了多少呢?实际的工作中并没有那么复杂,一个通用的函数定义形如: def func_name(*...

3395

扫码关注云+社区

领取腾讯云代金券