PHP Testcase简介
在开发过程中,往往需要对代码进行测试,以保证程序的运行效果与我们所预期的一致。虽然PHP本身无自带的测试框架,但是PHPUnit是一款广受欢迎的PHPUnit测试框架,其中的testcase类可以帮助我们轻松地进行单元测试。
举例说明:假如我们需要对一个“猜数字”游戏的业务逻辑进行测试,由于这个游戏的规则十分简单,即随机生成一个1~100之间的数,让用户输入数字猜测,若猜对则成功,否则提示“小了”或“大了”,最终告知用户猜测次数。我们只需要先定义一个具有猜数字游戏计算逻辑的类GuessNumber。
class GuessNumber { private $answer = 0; private $guessCount = 0; public function __construct(){ $this->answer = rand(1,100); } public function guess($num){ if(is_numeric($num) && $num>=1 && $num<=100){ $this->guessCount++; if($num < $this->answer){ return "too small"; }else if($num > $this->answer){ return "too big"; }else{ return "Correct!GuessCount:".$this->guessCount; } } return "invalid range"; } }
接着,我们就可以利用testcase类对GuessNumber类进行单元测试了。首先,我们需要新建一个继承于PHPUnit\Framework\TestCase的子类GuessNumberTest,通过setUp()方法在测试之前初始化GuessNumber对象。
require_once('Path/To/phpunit/autoload.php'); class GuessNumberTest extends PHPUnit\Framework\TestCase { protected $game; public function setUp(){ $this->game = new GuessNumber(); } }
接下来,我们可以编写一个testGuess方法,测试猜数字的逻辑是否正确。
public function testGuess(){ $this->assertEquals('invalid range',$this->game->guess(-1)); $this->assertEquals('too small',$this->game->guess(50)); $this->assertEquals('too big',$this->game->guess(80)); $this->assertEquals('Correct!GuessCount:3',$this->game->guess($this->game->ans)); }
最后,我们运行这个测试类即可得到测试结果。如果测试通过,会显示OK,否则会显示失败的原因。
phpunit GuessNumberTest.php