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->init(); } public function init(){ //implementation } }
如何在使用 PHPUnit 进行测试时设置它?
...实现... 测试
... function setUp(){ //initialize }
最佳答案
简而言之:使用 getMockForAbstractClass
创建一个 fake instance您需要传递的类的数量,以便您可以测试它们。
$a = $this->getMockForAbstractClass("aClass_Abstract");
$b = $this->getMockForAbstractClass("bClass_Abstract");
$class = new Sample($a, $b);
完整代码示例
(修复接口(interface)定义)
<?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
*/
关于php - 使用抽象参数实例化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5659856/