0

跟着我之前的网站开发,我们搭建了几个控制器类,对应我们网站开发中会出现的实体。我们的网站很简单:只是一个购物网站,供客户预订旅游巴士。

现在我被分配了一个需要完成的具有挑战性的任务,即对于单个控制器类,我需要编写一个测试用例来测试它是否正常工作。

例如,我们有一个名为“JobsController”的控制器类,如:

模型=数组('工作'=>新工作());} 函数 __destruct() { 父::__destruct(); } 函数 addJob( $name , $desc ) { if( $name == '' ) { return false; }; $params = array( 'name' => $name , 'description' => $desc ); 返回 $this->models['jobs']->add( $params ); } 函数 modifyJob( $jid , $name , $desc ) { if( $jid == '' || $name == '' ) { return false; }; $params = array( 'name' => $name , 'description' => $desc ); 返回 $this-> 模型['jobs']->modify($jid, $params); } 函数 removeJob( $jid ) { if( $jid == '' ) { return false; }; 返回 $this->models['jobs']->remove($jid); } function getJob( $jid ) { return $this->models['jobs']->getInfo( $jid ); } function getAllJobs() { return $this->models['jobs']->getAll(); } } ?> } function getJob( $jid ) { return $this->models['jobs']->getInfo( $jid ); } function getAllJobs() { return $this->models['jobs']->getAll(); } } ?> } function getJob( $jid ) { return $this->models['jobs']->getInfo( $jid ); } function getAllJobs() { return $this->models['jobs']->getAll(); } } ?>

和所有其他控制器类几乎相同,只是名称更改。

现在我真的需要你们帮助我如何编写一个简单的 php 文件来测试这个控制器类是否正常工作。在研究了你的代码之后,我可以自己动手使用其余的控制器。

多谢!

4

1 回答 1

4

在编写测试用例时,您基本上是在测试之前和之后的场景。在运行测试之前,您希望(每次)初始化一个干净的环境,以确保您知道会发生什么。接下来,您将运行您的方法并测试之后的环境是什么样的,确认您采取的操作是否具有预期的效果。

例如,要测试要使用作业创建环境的 modifyJob 方法,请使用测试值调用 modifyJob 方法,然后在同一个作业上调用 getJob 并确保返回值的值与您传递给 modifyJob 的值匹配:

function testModifyJob() {
  // create clean, known environment
  $controller = new JobsController();
  $job_id = $controller->addJob('name', 'description');

  // run the action
  $controller->modifyJob($job_id, 'new name', 'new description');

  //test the results
  $job = $controller->getJob($job_id);
  $result = $job['name'] == 'new name' && $job['description'] == 'new description';

  return $result;
}

为了测试您的控制器,您需要为该类提供的每个方法编写类似上述的测试用例,以确保该对象在您的系统中是可信任的。

在编写测试用例时,您很可能需要为您的测试在控制器上创建新方法,继续创建这些方法(如果您的任务允许)。测试用例提出这一点是很常见的,通常通过揭示这些细微差别来帮助完善类的可用功能(测试驱动开发拥有如此强大的追随者的原因之一)。这方面的一个示例是创建一个 hasJob($job_id) 方法,该方法将测试您的作业集合是否包含特定作业,从而允许您测试诸如 deleteJob() 之类的函数。

于 2010-02-12T01:12:52.960 回答