【问题标题】:How do I get PHPUnit to substitute a class in my test method?如何让 PHPUnit 在我的测试方法中替换一个类?
【发布时间】:2011-06-06 22:08:19
【问题描述】:

我有一个要测试的课程。代码如下:

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();

    }

}

那么 PHPUnit 是否可以在这里介入并使用 mock 来表示“new Example()”而不是使用实际的“Example”类?

【问题讨论】:

    标签: unit-testing object mocking phpunit


    【解决方案1】:

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

    function functionToTest( Example $class )
    

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

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

    但如果由于某种原因这种方法不适合您,请尝试使用 test_helpers 扩展提供的 set_new_overload() 函数。在Sebastian Bergmann's blog 中查看更多信息。

    【讨论】:

      猜你喜欢
      • 2011-12-26
      • 2021-03-12
      • 2019-06-29
      • 2022-01-24
      • 2017-04-20
      • 1970-01-01
      • 1970-01-01
      • 2017-10-20
      • 2017-10-19
      相关资源
      最近更新 更多