日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

phpunit 单元测试案例--签到任务

發布時間:2025/4/5 php 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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']); } }




總結

以上是生活随笔為你收集整理的phpunit 单元测试案例--签到任务的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。