PHPUnit模拟对象方法

时间:2013-05-01 18:51:41

标签: php phpunit

我正在使用PHPUnit学习单元测试,并且遇到了我无法解决的模拟对象的奇怪问题。我将这些虚拟文件设置为我遇到的示例:

的Class1

class PrimaryObj1
{
    function doNothing(SecondObj $s)
    {
    }
}

的Class2

class PrimaryObj2
{
    function doNothing(SecondObj $s)
    {
        $s->TestMethod();
    }
}

和测试文件:

class PrimaryObj1_test extends PHPUnit_Framework_TestCase
{
    private $primaryObj;
    function setUp()
    {
        $this->primaryObj = new PrimaryObj1();
    }
    function testDoNothing()
    {
        $secondObj = $this->getMock('SecondObj');
        $secondObj->expects($this->once())
                  ->method("TestMethod");
        $this->primaryObj->doNothing($secondObj);
    }
}

(每个虚拟类的一个测试文件,除了类名,一切都相同)。

当我运行PHPUnit时,这就是我得到的:

Running Tests/PrimaryObj1_test.php
1) PrimaryObj1_test::testDoNothing
Expectation failed for method name is equal to <string:TestMethod> when invoked 1 time(s).
Method was expected to be called 1 times, actually called 0 times.

Running Tests/PrimaryObj2_test.php
Fatal error: Call to undefined method Mock_SecondObj_99c898e7::TestMethod() in PrimaryObj2.php on line 5

所以首先它是疯了,它没有调用预期的方法,但是当我这样做时它会生气,因为它是未定义的。我只是无法获胜。我想这就是为什么我还是单身......

有关为何会发生这种情况的任何想法?

1 个答案:

答案 0 :(得分:0)

我收到了来自电子邮件列表服务的回复。这一行:

    $secondObj = $this->getMock('SecondObj');

应该是:

    $secondObj = $this->getMock('SecondObj', array('TestMethod'));

一旦我做出了改变,它就按预期工作了。