如何调用 Class::function 获得 Mock::function 响应

How to make any call to Class::function get Mock::function response

我正在进行单元测试并尝试用 class 函数替换值 returned,该函数在我的单元测试的其他地方调用。

我开始研究 Mock 对象,这似乎是我的解决方案。 这是我正在使用的代码:

<?php

namespace A;

class SomeClass
{
    public function doSomething()
    {
        return 20;
    }
}

/**
 * @group DaTest
 */
class DaTest extends \PHPUnit_Framework_TestCase
{
    public function testStub()
    {
        // Create a stub for the SomeClass class.
        $stub = $this
            ->getMock('A\SomeClass', array('doSomething'))
        ;

        // Configure the stub.
        $stub
            ->expects($this->any())
            ->method('doSomething')
            ->willReturn(1)
        ;

        $a = new SomeClass();

        var_dump($stub->doSomething)); // Return 1
        var_dump($a->doSomething());   // Return 20 -.-'
    }
}

如您所见,我觉得我不得不使用 Mock 来获得“1”returned。 但我的目标是制作 SomeClass return 1 的任何实例,但仅用于我的单元测试。

我错过了什么? 关于如何实现此目标的任何想法?

谢谢。

编辑: 为了准确显示我正在尝试做什么,我得到了另一个代码:

<?php

namespace A;

class SomeClass2
{
    public function showSomething()
    {
        $class = new SomeClass();
        // Here print 20, I want it to print 1 in my unit test
        echo $class->doSomething();
    }
}

我想要的只是 SomeClass2::showSomething() 在我的单元测试中打印 1,在非测试环境中调用它时打印 20 =)

因此,您需要做的是将 SomeClass 的实例作为参数注入 showSomething() 函数。因此,您将能够模拟 SomeClass

<?php

namespace A;

class SomeClass2
{
    public function showSomething(SomeClass $classInstance)
    {
        echo $classInstance->doSomething();
    }
}