如何为从yii框架扩展的函数“beforeControllerAction”创建单元测试

时间:2015-06-29 11:00:01

标签: yii phpunit

我需要一些想法,为动作'beforeControllerAction'创建单元测试,该动作从yii框架扩展。

1 个答案:

答案 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 .