0

テストの使用を提案するトピックの1つで、zendフレームワーク2の入門チュートリアルに従っています。提案するコードは次のとおりです。

namespace ApplicationTest\Controller;

use ApplicationTest\Bootstrap;
use Zend\Mvc\Router\Http\TreeRouteStack as HttpRouter;
use Application\Controller\IndexController;
use Zend\Http\Request;
use Zend\Http\Response;
use Zend\Mvc\MvcEvent;
use Zend\Mvc\Router\RouteMatch;
use PHPUnit_Framework_TestCase;

class IndexControllerTest extends PHPUnit_Framework_TestCase
{
    protected $controller;
    protected $request;
    protected $response;
    protected $routeMatch;
    protected $event;

    protected function setUp()
    {
        $serviceManager = Bootstrap::getServiceManager();
        $this->controller = new IndexController();
        $this->request    = new Request();
        $this->routeMatch = new RouteMatch(array('controller' => 'index'));
        $this->event      = new MvcEvent();
        $config = $serviceManager->get('Config');
        $routerConfig = isset($config['router']) ? $config['router'] : array();
        $router = HttpRouter::factory($routerConfig);

        $this->event->setRouter($router);
        $this->event->setRouteMatch($this->routeMatch);
        $this->controller->setEvent($this->event);
        $this->controller->setServiceLocator($serviceManager);
    }
    public function testIndexActionCanBeAccessed()
    {
        $this->routeMatch->setParam('action', 'index');

        $result   = $this->controller->dispatch($this->request);
        $response = $this->controller->getResponse();

        $this->assertEquals(200, $response->getStatusCode());        

    }
}

ご覧のとおり、ありません__autoload($class)

手動で機能させるために追加include "../../Bootstrap.php";しましたが、問題は解決しましたが、このコードを機能させることができたら覚えています。チュートリアルは概念的に明らかなことを忘れていないようで、トピックのコメントにそれに関するフィードバックがありません。上記のコードはおそらくどのように機能しますか?

4

1 に答える 1

0

なんとか動作させましたが、phpUnit の拡張された Request および Response オブジェクトを使用できないことに気付きました。これらは、初期の 2.0 リリースの手順です。少なくとも 2.0.7 以降では、手順が大幅に変更され、コードがよりクリーンになりました。

http://zf2.readthedocs.org/en/latest/user-guide/unit-testing.html

<?php

namespace ApplicationTest\Controller;

use Zend\Test\PHPUnit\Controller\AbstractHttpControllerTestCase;

class IndexControllerTest extends AbstractHttpControllerTestCase
{
    public function setUp()
    {
        $this->setApplicationConfig(
            include '/path/to/application/config/test/application.config.php'
        );
        parent::setUp();
    }

    public function testIndexActionCanBeAccessed()
    {
        $this->dispatch('/');
        $this->assertResponseStatusCode(200);

        $this->assertModuleName('application');
        $this->assertControllerName('application_index');
        $this->assertControllerClass('IndexController');
        $this->assertMatchedRouteName('home');
    }
}

この例では、Zend のコントローラー テスト ケースを拡張することによってテストが実行されます。これは、コントローラー テストが zf1 で実行された方法です。

于 2013-05-14T10:27:16.420 に答える