phpspec。检查数组的键

时间:2013-10-02 14:41:39

标签: bdd phpspec

存在一些课程:

class A{
  protected $options;
  public function setDefaults($defaults){
      $this->options=$defaults;
  }
  public function getOptions(){
     return  $this->options;
  }
}

和其他班级一样:

class B{
public function setDefaultOptions(A $options){
   $options->setDefaults('foo'=>'bar')
}

}

用途:

$a=new A();
$b=new B();
$b->setDefaultsOptions(a);

我如何检查B的规格是否设置了$ a-> options ['foo']?


现在我将其实现为:

  public function getMatchers(){
    return array('haveResolverKey'=>
    function($subject, $key){
        $resolver=new A();
        $subject->setDefaultOptions($resolver);
        $ret=$resolver->getOptions();

        return isset($ret[$key]);
    });
  }

也许存在简单方法?

1 个答案:

答案 0 :(得分:1)

  

我如何检查B的规格是否设置了$ a-> options ['foo']?

你不应该。验证行为而不是状态

换句话说,您应该验证方法的输出并表达对协作者的期望,而不是验证类的内部状态。

一旦你重构,内部可能会改变,行为应该保持不变。

据我了解你的例子,它可以描述为:

class BSpec extends ObjectBehavior
{
    function it_sets_defaults_on_a(A $a)
    {
        $a->setDefaults(array('foo' => 'bar'))->shouldBeCalled();

        $this->setDefaultOptions($a);
    }
}