qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          phpunit 單元測試案例--簽到任務

          工作需要,最近要寫單元測試了,這里算是一個記錄的過程吧,慢慢記錄,慢慢學習,慢慢總結,早點把這塊的信息熟悉起來~~
            之前也寫過簡單的單元測試的一些小的說明,但是現在的是比較具體的例子了!
            這里要列舉的一個例子是如下的描述:
            名稱:簽到任務,領金幣。
            規則:
            1、可以每天簽到,簽到一天領取一個金幣,連續3天或者7天有額外的幾個金幣。
            2、某一段時間內可以做一起簽到任務,連續簽到3天,可以額外給50金幣,每個用戶只能做一次。
            首先簡單介紹下表結構,這里用的是MongoDB:
            第一個表就是每天簽到的表里面很重要的2個字段是:
          "last_time" : 1385545551,#最后簽到時間
          "sign_time" : [
          1385545551  #連續簽到天數,數組,存放連續簽到的時間
          ],
            第二張表是任務表,每個用戶對應一條記錄,這條記錄里包括不同的任務執行狀態:
          "sign" : { #sign代表簽到任務
          "last_time" : 1385545357,#最后一次更新時間
          "status" : 4 #1第一天簽到,2第二天,3第三天 4已領獎
          }

           單元測試中會有一些調用方法,這里我不列出具體代碼,只解釋方法的作用:
          <?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']);
          }
          }

          posted on 2013-12-24 11:39 順其自然EVO 閱讀(287) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2013年12月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 义乌市| 库伦旗| 南皮县| 措美县| 墨竹工卡县| 章丘市| 贵德县| 古蔺县| 张北县| 固始县| 阳泉市| 汤原县| 太湖县| 蚌埠市| 北辰区| 无极县| 金秀| 丰都县| 明光市| 巴彦淖尔市| 海门市| 神池县| 东乌珠穆沁旗| 卓资县| 崇州市| 正镶白旗| 比如县| 双城市| 德阳市| 柳林县| 青神县| 准格尔旗| 荔波县| 密云县| 德安县| 渭南市| 通河县| 海门市| 桐乡市| 辽源市| 澳门|