【问题标题】:Testing using fake object PHPUnit使用假对象 PHPUnit 进行测试
【发布时间】:2015-06-27 11:29:40
【问题描述】:

我有一个路由器类,它有 3 个参数:模式、回调和 http 方法。
如果回调为ControllerDispatch对象,则调用控制器并执行动作。

我不知道如何测试控制器调度。 这是我的 DispatcherTest.php 代码

public function testControllerDispatch()
{
    $controller = new Routeria\Tests\FakeController;
    $this->collection->addRoute(new Route('/testController/{id:int}', new ControllerDispatch($controller, 'fakeMethod')));
    $request = $this->getMockBuilder('\Symfony\Component\HttpFoundation\Request')
                        ->disableOriginalConstructor()
                        ->getMock();
    $request->expects($this->once())
            ->method('getPathInfo')
            ->will($this->returnValue('/testController/55'));
    $request->expects($this->once())
            ->method('getMethod')
            ->will($this->returnValue('GET'));
    $this->router->route($request);
    $this->expectOutputString('Hello user id: 55');
    $this->dispatcher->dispatch();
}

所有的测试都在如下图的test目录下..FakeController也包含在里面

而且,这是引导文件

<?php
 $loader = require __DIR__ . '/../vendor/autoload.php';
 $loader->add('Routeria\Tests', __DIR__);

这是我的假控制器

<?php
namespace Routeria\Tests;

    class FakeController
    {
        public function fakeMethod($fakeID)
        {
            echo 'Hello user id: '.$fakeID;
        }
    }

而且,这是我的 phpunit.xml.dist

<?xml version="1.0" encoding="UTF-8"?>

<phpunit backupGlobals="false"
     backupStaticAttributes="false"
     colors="true"
     convertErrorsToExceptions="true"
     convertNoticesToExceptions="true"
     convertWarningsToExceptions="true"
     processIsolation="false"
     syntaxCheck="false"
     bootstrap="tests/bootstrap.php"
    >
<testsuites>
    <testsuite name="Routeria Testing">
        <directory>./tests/</directory>
    </testsuite>
</testsuites>

<filter>
    <whitelist>
        <directory>./src/</directory>
    </whitelist>
</filter>

为什么它不起作用? 它说“找不到致命错误类'Routeria\Tests\FakeController'” 请帮忙.. 如果你想看代码,我已经上传到我的 git 了:https://github.com/terryds/routeria

【问题讨论】:

    标签: php unit-testing phpunit


    【解决方案1】:

    啊哈!终于有办法了!
    我用 Routeria\Tests 命名了测试,用 Routeria\TestHelper 命名了辅助类/假对象
    我将这个 bootstrap.php 修改为:

    $loader = require __DIR__ . '/../vendor/autoload.php';
    $loader->setPsr4('Routeria\\Tests\\', __DIR__);
    $loader->setPsr4('Routeria\\TestHelper\\', __DIR__ . '/src');
    

    然后,它起作用了!

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 2011-10-10
      • 2016-06-04
      • 2013-09-13
      • 2011-06-02
      • 2015-09-01
      • 1970-01-01
      • 2013-06-21
      • 2011-06-06
      相关资源
      最近更新 更多