【问题标题】:PHPUnit constraints extension gives error "PHPUnit_Util_Type::export()" not foundPHPUnit 约束扩展给出错误“PHPUnit_Util_Type::export()”未找到
【发布时间】:2015-08-20 15:09:02
【问题描述】:

我想要一个可以告诉我的模拟对象:

  1. 当其中一个方法被调用时
  2. 传递给该方法的参数之一
  3. 是一个数组
  4. 并且具有特定的键/值对。

我想用PHPUnit的约束来实现,这个,所以我的测试代码是这样的:

$mock = $this->getMock('\Jodes\MyClass');
$mock->expects($this->once())
        ->method('myMethod')
        ->with(
                $this->logicalAnd(
                    $this->isType('array'),
                    $this->arrayHasPair('my_key', 'my_value'),
                )
            );
// ... code here that should call the mock method

this previous SO question 中,这个人最终编写了自己的约束。

我发现this library 似乎实现了很多漂亮的东西。所以我通过在我的 composer.json 的 require 部分添加这一行来安装它:

"etsy/phpunit-extensions": "@stable"

但是当我尝试使用它时,我得到一个错误。我是这样使用的:

class MyClassTest extends PHPUnit_Framework_TestCase {
    public function arrayHasPair($key, $value){
        return new PHPUnit_Extensions_Constraint_ArrayHasKeyValuePair($key, $value);
    }
    public function testmyMethod(){
        // code as per my example above
    }
}

但这会产生这个错误:

PHP 致命错误:在第 50 行调用 C:\MyProject\vendor\etsy\phpunit-extensions\PHPUnit\Extensions\Constraint\ArrayHasKeyValuePair.php 中未定义的方法 PHPUnit_Util_Type::export()

This previous question/answer 解释了问题所在,但我不确定我应该怎么做。这是否意味着该库的开发人员已经放弃了它?有替代品吗?或者我有什么选择来修复它?我很惊讶这样的基本约束在 PHPUnit 中仍然不存在。显然我可以编写自己的约束,但肯定没有必要吗?

【问题讨论】:

  • 我一直在使用MockeryHamcrest 来处理这种约束。很适合我。
  • 谢谢,看起来很棒!现在试试看。
  • @Simba,你知道我如何使用 mockery/hamcrest 来测试一个参数是否是一个包含键/值对的数组吗?我是否需要编写一个查找该对的闭包?

标签: php phpunit constraints


【解决方案1】:

PHPUnit_Util_Type::export() 方法不久前被删除。您要使用的扩展必须更新为与当前版本的 PHPUnit 兼容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 2017-03-06
    相关资源
    最近更新 更多