<?php /** * 签到任务单元测试 * * @author shayang88 * @since 2013-11-27 * @copyright Copyright (c) 2005-2012 Inc. * @desc * */ require_once dirname(__FILE__) . '/../../webroot/bootstrap.php'; class test_sign_task extends PHPUnit_Framework_TestCase { public $testUid = 5888882; //这个是测试的用户id /** * 这个函数主要用来清除用户在2个表中的任务状态,重置为下面做准备 */ public function testClear(){ //清除现有表签到任务,主要是任务的状态归零 $taskModel = new GuaziTaskModel(); $taskModel->clearTask($this->testUid, 'sign'); //清除签到表,清除用户的连续签到天和最后签到时间 $signModel = new GuaziSignModel(); $signModel->getCollection()->update(array('uid' => $this->testUid ), array('$unset' => array ('last_time' => 1, 'sign_time' => 1))); } /** * 这个函数用来断言上一步清除任务状态是否完成 */ public function testEmpty(){ //断言是否任务状态已清空 $objSignTask = Task_Factory::factory('sign'); $signStatus = $objSignTask->getStatus($this->testUid); //清除完成,则任务状态归零,所以用0来断言 $this->assertEquals(0, $signStatus); //断言是否任务已清空 $signModel = new GuaziSignModel(); $arrsign = $signModel->getSignByUid($this->testUid); //这里因为清空是直接清除了字段,所以用NULL来断言 $this->assertNull($arrsign['n_t']); $this->assertNull($arrsign['t']); } /** * 这个函数是签到数据的供给器,主要是为了模拟签到连续的天数,为下面的testSign提供数据,这里 * 需要了解数据供给器的用法@dataProvider * @return array */ public function dataProducer() { //提供签到数据 //第1个参数是签到时间,第2个是连续签到的天数,第3个是任务的完成状态 return array( array('2013-11-25 19:30', 1, 1), array('2013-11-26 18:30', 2, 2), array('2013-11-27 10:30', 3, 3), array('2013-11-28 23:59', 4, 4), array('2013-11-29 22:59', 5, 4), ); } /** * @dataProvider dataProducer */ public function testSign($nowTime,$signCount,$taskStatus) { //循环接收dataProducer给的值开始执行任务,3个参数就是上面数组的个数 $now = strtotime($nowTime); $signModel = new GuaziSignModel(); //更新任务表状态并断言 $objSignTask = Task_Factory::factory('sign'); //更新任务状态,当然内部会区分每一步不同的操作 $doTaskRes = $objSignTask->doTaskForPhpunit($this->testUid, $now); //断言执行结果 $this->assertEquals(1, $doTaskRes); //获取任务状态 $signStatus = $objSignTask->getStatus($this->testUid); //断言任务状态 $this->assertEquals($taskStatus, $signStatus); //更新签到表并断言 $ret = $signModel->updateLastSign($this->testUid,$now); //断言连续签到天数 $this->assertCount($signCount, $ret['t']); } } |