用抽象参数实例化对象

| 接口aInterface {      公共功能__construct(aClass_Abstract $ a,bClass_Abstract $ b){      } } Sample类实现aInterface {      公共功能__construct(aClass_Abstract $ a,bClass_Abstract $ b){          //实施          $ this-> init();      }      公共函数init(){          //实施      } } 如何在使用PHPUnit进行测试时进行设置? 实施 测试 ... 函数setUp(){     //初始化 }     
已邀请:
概括地说:使用ѭ0来创建需要传递的类的伪实例,以便可以对其进行测试。
$a = $this->getMockForAbstractClass(\"aClass_Abstract\");
$b = $this->getMockForAbstractClass(\"bClass_Abstract\");
$class = new Sample($a, $b);
完整代码示例 (修复了接口定义)
<?php

interface aInterface{
     public function __construct(aClass_Abstract $a, bClass_Abstract $b);
}
class Sample implements aInterface
{
     public function __construct(aClass_Abstract $a, bClass_Abstract $b){
         //implementation
         $this->a = $a;
     }
     public function init(){
         return $this->a->myMethod();
     }
}

abstract class aClass_Abstract {
    abstract public function myMethod();
}

abstract class bClass_Abstract {}

class SampleTest extends PHPUnit_Framework_TestCase {

    public function testSetup() {

        $a = $this->getMockForAbstractClass(\"aClass_Abstract\");
        $a->expects($this->once())->method(\"myMethod\")->will($this->returnValue(true));
        $b = $this->getMockForAbstractClass(\"bClass_Abstract\");
        $class = new Sample($a, $b);
        $this->assertTrue($class->init());

    }
}


/*
PHPUnit 3.5.12 by Sebastian Bergmann.

.

Time: 0 seconds, Memory: 3.25Mb
*/
    
假设您要测试
Sample
,您将使用存根或Mocks:
class SampleTest extends PHPUnit_Framework_TestCase
{
    public function testSomething()
    {
        $stubA = $this->getMockForAbstractClass(\'aClass_Abstract\');
        $stubA->expects($this->any())
              ->method(\'abstractMethod\')
              ->will($this->returnValue(TRUE));

        // do the same for bClass_Abstract

        $sample = new Sample($stubA, $stubB);
        // add an assertion for sample
    }
}
将PHPUnit手册引用为“ 0”:   
getMockForAbstractClass()
方法返回抽象类的模拟对象。给定抽象类的所有抽象方法都是模拟的。这允许测试抽象类的具体方法。 有关测试双打的更多信息,请参见该章;有关使用PHPUnit模拟的更多信息,请参见StackOverflow。     
您可能正在寻找模拟对象。 http://www.phpunit.de/manual/3.6/en/test-doubles.html https://github.com/padraic/mockery     

要回复问题请先登录注册