测试递归方法

2024-04-08

我想测试一个方法

public function get($key)
{
    if (!($time = $this->driver->get($key))) {
        if ($key == self::LAST_UPDATE_KEY) {
            $time = new \DateTime();
            $this->driver->set($key, $time);
        } else {
            $time = $this->get(self::LAST_UPDATE_KEY); // need test this condition
        }
    }

    return $time;
}

来自驱动程序的第一个请求数据应该返回 null,而第二个含义对我来说是必要的。

我写一个测试

public function testGetEmpty()
{
    $time = new \DateTime();
    $driver_mock = $this
        ->getMockBuilder('MyDriver')
        ->getMock();
    $driver_mock
        ->expects($this->once())
        ->method('get')
        ->with('foo')
        ->will($this->returnValue(null));
    $driver_mock
        ->expects($this->once())
        ->method('get')
        ->with(Keeper::LAST_UPDATE_KEY)
        ->will($this->returnValue($time));

    $obj = new Keeper($driver_mock);
    $this->assertEquals($time, $obj->get('foo'));
}

执行时返回错误

Expectation failed for method name is equal to <string:get> when invoked 1 time(s)
Parameter 0 for invocation MyDriver::get('foo') does not match expected value.
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'last-update'
+'foo'

我很长时间没有写单元测试了,很多人都忘记了。帮助我理解。


如果您仍在寻找这方面的指导并且不确定在哪里使用at()这需要设置为expects,使用答案中的示例,它应该如下所示。

public function testGetEmpty()
{
    $time = new \DateTime();
    $driver_mock = $this
        ->getMockBuilder('MyDriver')
        ->getMock();
    $driver_mock
        ->expects($this->at(0))
        ->method('get')
        ->with('foo')
        ->will($this->returnValue(null));
    $driver_mock
        ->expects($this->at(1))
        ->method('get')
        ->with(Keeper::LAST_UPDATE_KEY)
        ->will($this->returnValue($time));

    $obj = new Keeper($driver_mock);
    $this->assertEquals($time, $obj->get('foo'));
}

在此背景下,at将定义何时应使用每次调用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

测试递归方法 的相关文章

随机推荐

  • 没有错误:未调用 PDO 构造函数

    下午好 我昨天开始使用 PDO 但遇到了一些问题 我正在创建扩展类 它不起作用 而且我找不到错误 这是我的助手类的代码 用于工作女巫 PDO class EPDO extends PDO Some identificator of conn
  • 如何在 Javascript 的脚本元素中添加局部变量和不同的函数[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我需要创建一个脚本元素 如下所示 div class abcd div 我尝试通过首先通过 document Createelement 选
  • 如何查找特定

    环境 美丽的汤4 Python 2 7 5 Logic 找到所有 li 内的实例 ul 与一类my class eg ul class my class li thing one li li thing two li ul 澄清 只需获取之
  • Flutter - 自动调整 AlertDialog 大小以适合列表内容

    我需要从休息网络服务动态加载列表城市 并让用户从警报对话框中选择一个城市 我的代码 createDialog fetchCities then response showDialog context context builder Buil
  • VSCode 显示文件夹 /run/user/1000/doc 中路径的问题

    我最近在更新到 v1 77 3 后在 VSCode 中遇到了一个问题 新项目的路径是错误的 而旧项目的路径是正确的 特别是 新项目在前缀为的文件夹中打开 run user 100 doc 接下来是类似于 sha256 的摘要 每个文件夹都不
  • \ 对非转义字符有何作用?

    I 又问了一个不好的问题 https stackoverflow com questions 4380386 fix escape javascript escape character所以我会问别的事情 根据http www c poin
  • 存储值以便在以后的函数中使用的最佳方法是什么?我听说全局变量很邪恶

    所以我使用的代码位于http jsfiddle net 8j947 10 http jsfiddle net 8j947 10 它为变量 isLive 返回 true 或 false 值 如何在稍后的函数中使用变量 onLive 我在以下位
  • 使用Jackson写yaml?

    我正在使用 Jackson 来读取和修改 yaml 文件 效果很好 不过 我找不到编写 yaml 所需的魔法 ObjectMapper mapper new ObjectMapper new YAMLFactory ObjectNode r
  • 使用 docker-compose 时如何为 mongodb 镜像添加 --auth ?

    我正在使用 docker compose 来运行由 node mongodb nginx 创建的项目 我已经使用构建了该项目docker build 然后我用docker up d nginx开始我的项目 但我还没有找到使用 auth 运行
  • 我应该在 Common Lisp 中使用哪些正则表达式库? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Python 列表索引效率

    关于内置 python 列表对象的快速问题 假设您有一个包含数字 0 99 的列表 您正在编写一个程序 该程序获取列表中的最后一项并将其用于其他目的 使用list 1 比使用list 99 更有效吗 换句话说 无论哪种情况 python 都
  • Python-从另一个列表中删除一组列表

    array1 1 2 3 4 5 6 7 8 9 array2 1 2 2 2 5 6 6 6 9 temp set array2 array1 remove temp Traceback most recent call last Fil
  • JqG​​rid 搜索字段的多个文本框

    我想知道 JqGrid 高级搜索是否可以为我想要搜索的某些字段显示多个文本框 例如 如果我有一个 电话号码 字段 我希望能够可视化 2 个框 一个用于区号 另一个用于电话号码的其余部分 然后按 查找 后 我希望能够获取两个值并将它们合并或执
  • 将事件分配给事件处理程序的两种不同类型之间的区别

    我在 SO 中看到了这个示例代码 它说一种做法不好 另一种做法很好 但我不明白为什么 事实上 我收到了著名的 RCW COM 对象错误 该帖子说这可能是一个原因 public class SomeClass private Interop
  • 如何在单击项目时检查ListView的复选框?

    如何在单击项目时检查ListView的复选框 我有一个带有复选框 文本视图 按钮的列表视图 这里我想选择ListView的多行 所以使用了CheckBox 如果我点击一行 我想让它对应的CheckBox被选中并获取ListView中被点击项
  • 每个Android的location.Address方法返回什么?

    我试图弄清楚如何使用 Android SDK 和 android location Address 类获取地址组件 有些方法非常简单 其他方法很容易通过示例中的示例来理解文档 http developer android com refer
  • .Net Core - CS0012“对象”在未引用的程序集中定义

    我是 Net Core 的新手 我正在尝试基于它构建一个构建系统 作为该项目的一部分 我创建了一个抽象类 它详细说明了构建任务应实现的内容 并将其填充到共享库中 可执行项目引用该库并扫描项目目录以查找特殊命名的目录 然后检查是否有任何 cs
  • Play Framework Form“折叠”方法命名原理

    Play 框架 2 x 表格类 http www playframework com documentation 2 0 api scala index html play api data Form有一个方法叫做foldwho 的用法表示
  • 所需的后台模式 iOS6 Xcode 4.5

    我注意到在 Xcode 4 5 和 iOS6 中 必需的背景模式 应用程序播放音频 不起作用 有其他人注意到这一点吗 如果是的话 您找到解决办法了吗 Thanks 我相信它可能取决于您为 AVAudioSession 指定的类别类型 确保将
  • 测试递归方法

    我想测试一个方法 public function get key if time this gt driver gt get key if key self LAST UPDATE KEY time new DateTime this gt