PHPUnit 和 Mock 对象不起作用

标签 php object mocking phpunit stubs

我不确定是我做错了什么,还是 PHPUnit 和模拟对象的错误。基本上我想测试是否 $Model->doSomething()$Model->start() 时调用被触发。

我在 VirtualBox 中使用 Ubuntu,并通过 pear 安装了 phpunit 1.1.1。

完整代码如下。任何帮助将不胜感激,这让我发疯。

<?php
require_once 'PHPUnit/Autoload.php';

class Model
{
    function doSomething( ) {
        echo 'Hello World';
    }

    function doNothing( ) { }

    function start( ) {
        $this->doNothing();
        $this->doSomething();
    }
}

class ModelTest extends PHPUnit_Framework_TestCase
{
    function testDoSomething( )
    {
        $Model = $this->getMock('Model');
        $Model->expects($this->once())->method('start'); # This works
        $Model->expects($this->once())->method('doSomething'); # This does not work
        $Model->start();
    }
}
?>

PHPUnit的输出:
There was 1 failure:

1) ModelTest::testDoSomething
Expectation failed for method name is equal to <string:doSomething> when invoked 1 time(s).
Method was expected to be called 1 times, actually called 0 times.


FAILURES!
Tests: 1, Assertions: 1, Failures: 1.

最佳答案

正如您所发现的,您需要告诉 PHPUnit 要模拟哪些方法。此外,我会避免为您直接从测试中调用的方法创建期望。我会这样写上面的测试:

function testDoSomething( )
{
    $Model = $this->getMock('Model', array('doSomething');
    $Model->expects($this->once())->method('doSomething');
    $Model->start();
}

关于PHPUnit 和 Mock 对象不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12131454/

相关文章:

php - 使用 curl 和 api v3 在 Youtube 上上传视频

php - 使用 PHP 获取 Drupal 7 中的用户列表

java - 设置接口(interface)问题和对象

android - 如何将多个对象放入 android 的 ScrollView 条目中?

php - 使用 PHPWord 下载 DOCX 文件时出现损坏的文件

php - Laravel 5.1 - 验证用户名、密码,如果确认 = 1

javascript - 编写一个函数,返回其对应的所有键的所有值的数组

java - 是否可以使用 Mockito 进行严格的模拟?

java - 如何解决以下 stub 是不必要的 - Mockito - Android

已被覆盖的 C# FakeItEasy 假方法