<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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 閱讀(284) 評論(0)  編輯  收藏


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


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

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 在线亚洲v日韩v| 色婷婷亚洲十月十月色天| 特黄特色的大片观看免费视频| 亚洲精品无码专区久久同性男| 久久免费国产精品一区二区| 自拍偷区亚洲国内自拍| 亚洲精品成人久久久| 久久午夜伦鲁片免费无码| 亚洲欧美不卡高清在线| 亚洲成AV人片在线观看无码| 无码视频免费一区二三区| 在线免费视频你懂的| 99999久久久久久亚洲| 国产亚洲色视频在线| 嫖丰满老熟妇AAAA片免费看| www免费黄色网| 亚洲永久网址在线观看| 亚洲爆乳精品无码一区二区三区| 欧亚精品一区三区免费| 在线观看免费无码视频| 亚洲AV无码专区在线电影成人| 久久精品国产69国产精品亚洲| 毛片免费在线播放| 久久国产乱子伦精品免费不卡| 亚洲日韩一区二区一无码| 久久亚洲精品国产精品黑人| 日韩毛片免费在线观看| 13一14周岁毛片免费| 国产午夜无码片免费| 免费看又黄又爽又猛的视频软件 | 亚洲毛片网址在线观看中文字幕 | 日本特黄特色AAA大片免费| 国产色在线|亚洲| 无码av免费一区二区三区| 美女又黄又免费的视频| 国产v亚洲v天堂a无| 亚洲国产香蕉碰碰人人| 亚洲色自偷自拍另类小说| 国产一级高清视频免费看| 免费人成在线视频| 亚洲w码欧洲s码免费|