6

我正在用 phpunit 测试 php 代码,但我遇到了一个问题:

我正在测试类:

class ClassName
{
  public function MethodName()
  {
    // something

    $objectName = new Object();
    $variableName = $objectName->execute();

    // something
  }
}

我想创建对象的模拟。我不想调用真正的方法execute()。我不知道如何用 phpunit 做到这一点。我知道依赖注入,但是恕我直言,这种情况并不能通过依赖注入来解决。

谢谢你的回答。我很抱歉我的英语。

4

1 回答 1

7

实际上,这种情况可以通过依赖注入来解决。假设您不是在 MethodName 中实例化 Object,而是注入它。无论是通过构造器、设置器还是方法,对于原理来说都没有那么重要。

class ClassName
{
    public function MethodName(Object $objectName)
    {
        // something

        $variableName = $objectName->execute();

        // something
    }
}

因为您现在没有在要测试的方法中实例化对象,所以您可以在要测试时传递一个模拟对象。

public function testMethodName(){
    $mock = $this->getMockBuilder('Object')->getMock();

    $className = new ClassName;

    $result = $className->MethodName($mock);

    $this->assertTrue($result);
}

我没有运行这个测试方法,但我认为它说明了依赖注入对可测试性的意义。

于 2013-06-04T09:03:32.793 回答