php - mock :测试参数是否是包含键/值对的数组

标签 php phpunit constraints hamcrest mockery

我如何使用 mockery 和 hamcrest 断言当调用模拟对象的方法时,传递给它的参数之一是包含键/值对的数组?

例如,我的测试代码可能如下所示:

$mock = m::mock('\Jodes\MyClass');

$mock   ->shouldReceive('myMethod')
        ->once()
        ->with(
                    arrayContainsPair('my_key', 'my_value')
                );

我知道我可以用闭包来写它,但我只是想知道是否有另一种方法可以让它读起来稍微好一点:

$mock   ->shouldReceive('myMethod')
        ->once()
        ->with(
                m::on(function($options){
                    return 
                        is_array($options) &&
                        isset($options['my_key']) &&
                        $options['my_key'] == 'my_val';
                })
            );

最佳答案

我通过查看 Hamcrest PHP code here 找到了答案,

函数名称在文档注释中给出:

 * @factory hasEntry

所以我的代码将如下所示:

$mock   ->shouldReceive('myMethod')
        ->once()
        ->with(
                    hasEntry('my_key', 'my_value')
                );

关于php - mock :测试参数是否是包含键/值对的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32097390/

相关文章:

php - 从 Linux 迁移到 Windows 后的 WSOD

php - header 中的 HTTP 内容类型

php - 自动测试等同于 PHP?

unit-testing - 单元测试日期 - 如果不是工作日

grails - Grails日期约束

iOS 约束方程值

php - 使用 Yii 创建 PDF 或 Word 文档?

php - 检查 MySQL 中单行字符串中是否存在数字

bash - 自动启动 Selenium RC 服务器

C# 泛型约束