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

简介:

因工作需要,最近要写单元测试了,这里算是一个记录的过程吧,慢慢记录,慢慢学习,慢慢总结,早点把这块的信息熟悉起来~~

之前也写过简单的单元测试的一些小的说明,但是现在的是比较具体的例子了!


这里要列举的一个例子是如下的描述:

名称:签到任务,领金币。

规则:

    1、可以每天签到,签到一天领取一个金币,连续3天或者7天有额外的几个金币。

    2、某一段时间内可以做一起签到任务,连续签到3天,可以额外给50金币,每个用户只能做一次。


首先简单介绍下表结构,这里用的是MongoDB:

    第一个表就是每天签到的表里面很重要的2个字段是:

 

1
2
3
4
"last_time"  : 1385545551, #最后签到时间
"sign_time"  : [
1385545551   #连续签到天数,数组,存放连续签到的时间
],

    第二张表是任务表,每个用户对应一条记录,这条记录里包括不同的任务执行状态:

 

1
2
3
4
"sign"  : {  #sign代表签到任务
"last_time"  : 1385545357, #最后一次更新时间
"status"  : 4  #1第一天签到,2第二天,3第三天 4已领奖
}


单元测试中会有一些调用方法,这里我不列出具体代码,只解释方法的作用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<?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' ]);
}
}
本文转自shayang8851CTO博客,原文链接: http://blog.51cto.com/janephp/1332575 ,如需转载请自行联系原作者
相关文章
|
21天前
|
机器学习/深度学习 编解码 监控
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
这篇文章详细介绍了如何使用YOLOv8进行目标检测任务,包括环境搭建、数据准备、模型训练、验证测试以及模型转换等完整流程。
498 1
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
20天前
|
机器学习/深度学习 监控 计算机视觉
目标检测实战(八): 使用YOLOv7完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
本文介绍了如何使用YOLOv7进行目标检测,包括环境搭建、数据集准备、模型训练、验证、测试以及常见错误的解决方法。YOLOv7以其高效性能和准确率在目标检测领域受到关注,适用于自动驾驶、安防监控等场景。文中提供了源码和论文链接,以及详细的步骤说明,适合深度学习实践者参考。
162 0
目标检测实战(八): 使用YOLOv7完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
21天前
|
机器学习/深度学习 并行计算 数据可视化
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用PaddleClas框架完成多标签分类任务,包括数据准备、环境搭建、模型训练、预测、评估等完整流程。
66 0
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
|
21天前
|
机器学习/深度学习 数据采集 算法
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
这篇博客文章介绍了如何使用包含多个网络和多种训练策略的框架来完成多目标分类任务,涵盖了从数据准备到训练、测试和部署的完整流程,并提供了相关代码和配置文件。
37 0
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
|
21天前
|
机器学习/深度学习 XML 并行计算
目标检测实战(七): 使用YOLOX完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用YOLOX完成图像目标检测任务的完整流程,包括数据准备、模型训练、验证和测试。
105 0
目标检测实战(七): 使用YOLOX完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
25天前
|
分布式计算 大数据 Spark
大数据-95 Spark 集群 SparkSQL Action与Transformation操作 详细解释与测试案例(二)
大数据-95 Spark 集群 SparkSQL Action与Transformation操作 详细解释与测试案例(二)
37 1
|
2月前
|
前端开发 机器人 测试技术
【RF案例】Web自动化测试弹窗处理
在进行Web自动化测试时,常会遇到不同类型的弹窗,如ajax、iframe、新窗口及alert/Confirm等。这些弹窗可通过Selenium进行定位与处理。其中,ajax弹窗直接定位处理;iframe需先选中再操作;新窗口类似iframe处理;而alert/Confirm则需特殊方法应对。在Robot Framework中,需先定义并获取窗口后使用特定关键字处理。此外,还有部分div弹窗需在消失前快速定位。希望本文能帮助大家更好地处理各类弹窗。
39 6
【RF案例】Web自动化测试弹窗处理
|
25天前
|
存储 SQL 分布式计算
大数据-95 Spark 集群 SparkSQL Action与Transformation操作 详细解释与测试案例(一)
大数据-95 Spark 集群 SparkSQL Action与Transformation操作 详细解释与测试案例(一)
36 0
|
3月前
|
资源调度 Java 调度
项目环境测试问题之Schedulerx2.0通过分布式分片任务解决单机计算瓶颈如何解决
项目环境测试问题之Schedulerx2.0通过分布式分片任务解决单机计算瓶颈如何解决
项目环境测试问题之Schedulerx2.0通过分布式分片任务解决单机计算瓶颈如何解决
|
3月前
|
Cloud Native Java 调度
项目环境测试问题之线程同步器会造成执行完任务的worker等待的情况如何解决
项目环境测试问题之线程同步器会造成执行完任务的worker等待的情况如何解决