php - 模拟php函数
问题描述
我为我的项目制作了一个 symfony 4 可重用包。我想以接近 100% 的覆盖率对其进行测试。但我不知道如何测试依赖于 php 函数的代码的某些部分。
例子 :
public function getStatusCode(\Exception $exception)
{
if ($exception instanceof HttpExceptionInterface) {
return $exception->getStatusCode();
}
if (is_a($exception, "Symfony\Component\Security\Core\Exception\AccessDeniedException")) {
return Response::HTTP_UNAUTHORIZED; // I want to test this
}
return Response::HTTP_INTERNAL_SERVER_ERROR;
}
我尝试使用 getMockBuilder 但模拟的类不正确。
有没有办法模拟或替换 is_a 或创建一个类与条件相同的模拟?
解决方案
如果你真的想模拟这个功能,你可以使用这个包:https ://packagist.org/packages/hjerichen/prophecy-php
这是一个 PHPUnit TestCase 中的测试方法的简单示例。
$php = $this->prophesizePHP(__NAMESPACE__);
$php->is_a($exception, "Symfony\Component\Security\Core\Exception\AccessDeniedException")->willReturn(true);
$php->reveal()
推荐阅读
- .htaccess - 同一域内的简单 .htaccess 重定向
- xcode - ContentView_Previews 中的结构和类
- javascript - JQuery在滚动时闪烁
- node.js - 如何更改行“var domToPdf = require('dom-to-pdf');”
- javascript - 如何单击与 selenium 和 python 不可交互的下拉菜单并选择一个选项?
- c# - 如何从 JSON 属性中删除特定字符?
- python - 使用来自 Tkinter 的 StringVar() 创建多个空字符串变量
- java - 如何从 Firebase 中检索数据?dataSnapshot 有对象,但 getValue() 将返回 null
- vue.js - Vue中内联样式的动态CSS属性
- p5.js - 如何在我的 p5js 草图中重置 deltaTime 以重新启动草图?