Unit testing 将条令实体转换为单元测试的模拟

Unit testing 将条令实体转换为单元测试的模拟,unit-testing,symfony,doctrine-orm,mocking,entitymanager,Unit Testing,Symfony,Doctrine Orm,Mocking,Entitymanager,我试图为单元测试创建一个实体管理器的模拟,它返回一个深层实体结构 基本上我想改变这一点: $p1 = new Product(); $p1->setName("product 1"); // ... $c = new Command(); $c->setDate(new Date()); $c->setId(1); $c->addProduct($p1); // ... 为此: p1 = $this->getMock('\Ac

我试图为单元测试创建一个实体管理器的模拟,它返回一个深层实体结构

基本上我想改变这一点:

  $p1 = new Product();
  $p1->setName("product 1");
  // ...

  $c = new Command();
  $c->setDate(new Date());
  $c->setId(1);
  $c->addProduct($p1);
  // ...
为此:

  p1 = $this->getMock('\Acme\DemoBundle\Entity\Product');
  $p1->expects($this->any())
        ->method('getName')
        ->will($this->returnValue("product 1"));
  // ...

  $c = $this->getMock('\Acme\DemoBundle\Entity\Command');
  $c->expects($this->any())
        ->method('getDate')
        ->will($this->returnValue(new Date()));
  $c->expects($this->any())
        ->method('getId')
        ->will($this->returnValue(1));
  $c->expects($this->any())
        ->method('getProducts')
        ->will($this->returnValue(array($p1)));
  // ...
有没有一种简单而不那么冗长的方法来实现这一点

谢谢

看看Phake:

您可以按如下方式创建方法存根:

    $this->item1 = Phake::mock('Item');
    $this->item2 = Phake::mock('Item');
    $this->item3 = Phake::mock('Item');

    Phake::when($this->item1)->getPrice()->thenReturn(100);
    Phake::when($this->item2)->getPrice()->thenReturn(200);
    Phake::when($this->item3)->getPrice()->thenReturn(300);

    $this->shoppingCart = new ShoppingCart();
    $this->shoppingCart->addItem($this->item1);
    $this->shoppingCart->addItem($this->item2);
    $this->shoppingCart->addItem($this->item3);

您可以使用mockry,因为它有点简单。您应该看看,它是一个基于的Symfony2包。