我需要一些想法,为动作'beforeControllerAction'创建单元测试,该动作从yii框架扩展。
答案 0 :(得分:0)
beforeControllerAction
是来自任何' mycontroller'的父方法。 app控制器,来自框架核心。您不需要测试特定的核心框架代码(已经过测试)。您需要测试自己的代码。
测试控制器的一种方法是扩展/继承您自己的控制器'首先是控制器并为它构建测试。取自excellent article:
在protected / tests / unit下创建单元测试类 文件夹并将其命名为您要测试的类名称, 在其后添加
Test
字词。在我的情况下,我将创建一个名为ApiControllerTest.php的文件 包含ApiController.php类的所有测试。
<?php
// You can use Yii import or PHP require_once to refer your original file
Yii::import('application.controllers.ApiController');
class ApiControllerTest extends ApiController
{
}
在步骤#1中打开ApiControllerTest.php单元测试类 以上并使它类似于这样(基于你的 要求和结构):
class ApiControllerTest extends CTestCase
{
public function setUp()
{
$this->api = new ApiController(rand());
}
public function tearDown()
{
unset($this->api);
}
}
让我们尝试在我的ApiController.php中测试一个方法,即 formatResponseHeader。这就是它正在做的事情。
public function formatResponseHeader($code)
{
if (!array_key_exists($code, $this->response_code))
{
$code = '400';
}
return 'HTTP/1.1 ' . $code . ' ' . $this->response_code[$code];
}
现在,为了测试这个方法,我将打开ApiControllerTest.php并添加它 setUp()之后和tearDown()方法之前的代码:
public function testFormatResponseHeader()
{
$this->assertEquals('HTTP/1.1 400 Bad Request',$this->api->formatResponseHeader('400'));
$this->assertEquals('HTTP/1.1 200 OK',$this->api->formatResponseHeader('200'));
$this->assertEquals('HTTP/1.1 400 Bad Request',$this->api->formatResponseHeader('500'));
$this->assertNotEquals('HTTP/1.1 304 Not Modified',$this->api->formatResponseHeader('204'));
}
保存ApiControllerTest.php中的更改,然后尝试运行它 protected / tests目录:
phpunit .