相关疑难解决方法(0)

使用phpunit模拟抽象类中的具体方法

有没有什么好方法可以使用PHPUnit在抽象类中模拟具体方法?

到目前为止我发现的是:

  • expect() - > will()使用抽象方法工作正常
  • 它不适用于具体方法.而是运行原始方法.
  • 使用mockbuilder并给setMethods()提供所有抽象方法和具体方法.但是,它要求您指定所有抽象方法,使测试变得脆弱且过于冗长.
  • MockBuilder :: getMockForAbstractClass()忽略setMethod().


以下是一些单元测试,例如以上几点:

abstract class AbstractClass {
    public function concreteMethod() {
        return $this->abstractMethod();
    }

    public abstract function abstractMethod();
}


class AbstractClassTest extends PHPUnit_Framework_TestCase {
    /**
     * This works for abstract methods.
     */
    public function testAbstractMethod() {
        $stub = $this->getMockForAbstractClass('AbstractClass');
        $stub->expects($this->any())
                ->method('abstractMethod')
                ->will($this->returnValue(2));

        $this->assertSame(2, $stub->concreteMethod()); // Succeeds
    }

    /**
     * Ideally, I would like this to work for concrete methods too.
     */
    public function testConcreteMethod() {
        $stub = $this->getMockForAbstractClass('AbstractClass');
        $stub->expects($this->any())
                ->method('concreteMethod')
                ->will($this->returnValue(2)); …
Run Code Online (Sandbox Code Playgroud)

php phpunit unit-testing mocking

15
推荐指数
2
解决办法
1万
查看次数

标签 统计

mocking ×1

php ×1

phpunit ×1

unit-testing ×1