簡體   English   中英

使用假對象PHPUnit進行測試

[英]Testing using fake object PHPUnit

我有一個具有3個參數的Router類:模式,回調和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();
}

所有測試都在測試目錄中,如下圖所示。.還包括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

啊哈! 終於我有了解決方案!
我使用Routeria \\ Tests為測試命名空間,並使用Routeria \\ TestHelper為幫助類/假對象命名
我將此bootstrap.php修改為:

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

然后,它起作用了!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM