如何让PHPUnit替换我的测试方法中的类?

时间:2011-01-11 02:42:33

标签: unit-testing object mocking phpunit

我有一个我想测试的课程。这是代码:

class MyClass
{
    function functionToTest() {

        $class = new Example();

}

在PHPUnit中,我可以使用mocks / stubs来替换Example类吗?

在我的测试方法中:

class MyClassTest extends PHPUnit_Framework_TestCase {

    function testFunctionTest() {
        $testClass = new MyClass();
        $result = $testClass->functionTest();

    }

}

因此,不是使用实际的“Example”类,PHPUnit可以干预并使用mock来表示“new Example()”吗?

1 个答案:

答案 0 :(得分:2)

最佳解决方案是将Example实例注入functionToTest()方法:

function functionToTest( Example $class )

然后你就可以在单元测试中模拟它了:

function testFunctionTest() {
    $testClass = new MyClass();
    $class = $this->getMock( 'Example' );
    $result = $testClass->functionTest( $class );

}

但是,如果出于某种原因这种方法不适合您,请尝试使用set_new_overload()扩展程序提供的test_helpers功能。请参阅Sebastian Bergmann's blog中的更多信息。