- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我目前正在从事的项目包含面向对象和过程 PHP 代码的混合体。所以我有这样的东西:
function doStuff($value)
{
$x = $value + 1;
return $x;
}
class MyClass
{
private $field;
public function setMyValue($amount)
{
$this->field = doStuff($amount) + doStuff(2 * $amount);
}
}
这些依赖关系有几个,但数量很少(你可以用一只手数)。但是,我需要为这些类编写单元测试(使用 PHPUnit)并且我不知道如何模拟来自过程方面的函数(在本例中为 doStuff
)。据我所知,PHPUnit 中的模拟功能仅适用于类。
我会在没有任何模拟的情况下完成它,但问题是其中一些函数执行一些 IO 操作;我认为不以某种方式 mock 他们不是一个好主意。
我该如何解决这个问题?
最佳答案
当您从命名空间调用您的函数(在全局命名空间中定义)并始终不合格地调用它们时,您可以利用 PHP's namespace fallback policy .
PHP will fall back to global functions […] if a namespaced function […] does not exist.
这允许您通过在调用者的命名空间中提供函数来创建模拟。
为了让您的生活特别轻松,我将其打包到库中 php-mock-phpunit可以与 PHPUnit 一起使用:
namespace foo;
use phpmock\phpunit\PHPMock;
class BuiltinTest extends \PHPUnit_Framework_TestCase
{
use PHPMock;
public function testTime()
{
$time = $this->getFunctionMock(__NAMESPACE__, "time");
$time->expects($this->once())->willReturn(3);
$this->assertEquals(3, time());
}
}
关于php - 在 PHPUnit 中,如何模拟不属于类的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19684428/
我正在运行一个带有 while 约束的 SQL 查询,其中包含一些“id”。例如: SELECT table.id FROM TableOne table WHERE table.id IN (1,
假设我有以下类型声明: declare type Point2D = { x: number, y: number } 我从服务器获取一些数据并得到以下信息: const response = { x
根据 Angular 文档,Angular 的指令有 3 种类型: 组件 结构化 属性 根据以下官方链接:https://angular.io/guide/attribute-directives#d
在我正在处理的 Spring Boot 应用程序中,我有一个未注释为 bean (@Component) 的类,但包含一个 Autowiring 字段: public class One{ @
我有一个问题,我正在学习 swift 编程,我已经学会了毫无问题地处理表格和集合,包括使用 alamofire 的 cosumo 服务,但我遇到了一个问题,我在个性化表格 View 中有一个集合单元格
我已经在我们办公场所的实时服务器上配置了 TFS。 现在,我们可以访问它,即 windows 域 用户/事件目录 用户但是当我把我的用户名密码 给别人时我们的办公场所,并要求他通过 Web 链接从 v
我的 .plist 的 UIStatusBarHidden 是 false,所以我的应用程序不显示 iOS 状态栏。 连接到自定义 UIView 顶部的 UI 元素在 iPhone 6/7/8 设备上
执行某些 SP 时开始出现以下错误。与此错误相关的代码非常简单,将#temp 表连接到真实表 错误全文: Msg 605, Level 21, State 3, Procedure spSSRSRPT
我有一段代码调用 LogonUser(),然后调用 CreateProcessAsUser()。在 Win32 中,生成的进程属于属于 LOCAL 组的用户(例如,TESTDOMAIN\user1)。
Xcode 6.1 在组件安装完成后出现错误。 Xcode 安装程序是从其他 mac 复制的。请帮助我如何解决 dyld_sim 错误....谢谢 /Applications/Xcode.app/Co
我是一名优秀的程序员,十分优秀!