php - 使用抽象参数实例化对象

标签 php unit-testing oop automated-tests phpunit

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/

相关文章:

PHP新页面重定向

java - "Program to an interface"。这是什么意思?

javascript - 仅在调用同一对象时回调

javascript - WordPress最爱系统无插件学习方法

php - 使用 PHPExcel 在 1 个单元格内设置不同的字体颜色

c# - 如何向 WebRequest 添加 cookie?

c# - 在 C# 中使用 Moq 测试回调

c++ - 调用父类(super class)函数继承c++

javascript - 数据库获取后便士拍卖计时器更新

swift - Swift 中的参数化单元测试