PHP spec - 特定类型的数组

时间:2013-11-01 23:27:50

标签: rspec phpunit bdd phpspec

在phpspec中,如何测试类属性是否包含特定类型的数组?

例如:

class MyClass
{
   private $_mySpecialTypes = array();

   // Constructor ommitted which sets the mySpecialTypes value

   public function getMySpecialTypes()
   {
      return $this->_mySpecialTypes;
   }
}

我的规格如下:

public function it_should_have_an_array_of_myspecialtypes()
{
    $this->getMySpecialTypes()->shouldBeArray();
}

但我想确保数组中的每个元素都是MySpecialType

类型

在phpspec中最好的方法是什么?

2 个答案:

答案 0 :(得分:6)

您可以使用inline matcher

namespace spec;

use PhpSpec\ObjectBehavior;
use Prophecy\Argument;

use MySpecialType;

class MyArraySpec extends ObjectBehavior
{
    function it_should_have_an_array_of_myspecialtypes()
    {
        $this->getMySpecialTypes()->shouldReturnArrayOfSpecialTypes();
    }

    function getMatchers()
    {
        return array(
            'returnArrayOfSpecialTypes' => function($mySpecialTypes) {
                foreach ($mySpecialTypes as $element) {
                    if (!$element instanceof MySpecialType) {
                        return false;
                    }
                }
                return true;
            }
        );
    }
}

答案 1 :(得分:1)

PHP没有特定类型的数组,因此PHP规范无法直接测试。您可以反复移植必需代码并将其推送到您的规范中,只是为了控制您的类的行为,就像您指定它们一样,您可以创建这样的数组类型并对其进行规范。

这样您就可以将规格移动到这种类型的单个对象,将其指定一次并在任何地方使用它。

一个可能很好看的基类型是SPL'SplObjectStorage你可以扩展并使类型成为参数或第一个添加类型的接受。