欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

测试类的必要性

程序员文章站 2024-03-01 10:15:34
...

通常开发的时候,实现功能流程。

有时候,需要测试类,进行数据的模拟产生。

流程的模拟操作。

通过测试类,能够更加清晰数据表的意义。

能够让程序更加健壮。

将涉及到的各个层面的数据,都进行有条不紊的测试。

模拟产生订单,模拟并发订单。

模拟订单发货。

模拟订单收货。

模拟订单评价。

等等。

这些流程的编码,比增删改成有意思多了。

每个项目都很有必要,有个Test文件夹。

我们经常看到开源的项目中有个Test。

估计它的作用就是为了让开源项目健壮无敌吧。

在这里面可以使用各种数据结构与算法。充分的感受编程的创造性和乐趣。

通过程序,通过脚本,可以产生各种想要的数据。这就有点想linux,通过指令操作。远比windows通过界面操作来的爽。

程序员,更多的需要通过脚本操作数据的本领。

<?php
/**
 * User: jiqing
 * Date: 2017/6/13
 * Desc: 订单模拟测试
 */
namespace Test\Controller;

use Model\GoodsModel;
use Model\GoodsPriceModel;
use Model\OrderGoodsJudgeModel;
use Model\OrderGoodsModel;
use Model\OrderModel;
use Model\UserModel;

class OrderController extends BaseController {
    public function __construct(){
        parent::__construct();
    }

    // 主函数
    public function main() {
        // 模拟生成一些数据
        //shop_id 8  gid 20 星星 gid 21 熊猫
        //shop_id 7  gid 10 篮球 gid 11 哑铃 gid 18 足球(有规格 185 186 187 188) gid 19 男鞋(有规格 189 190 191 192)
        // uid 101 小李 102 小张 103 小王 104 小赵 105 小齐


        // 单店铺 单商品
//        $cartArr = ['shop_id'=>'7','goods'=>['gid'=>11,'count'=>3,'gpid'=>0]];
//        $uid      = 101;

        // 单店铺 多商品
//        $cartArr = ['shop_id'=>'7','goods'=>[['gid'=>10,'count'=>2,'gpid'=>0],['gid'=>11,'count'=>5,'gpid'=>0]]];
//        $uid      = 102;

        // 多店铺
//        $cartArr = [['shop_id'=>'7','goods'=>[['gid'=>10,'count'=>2,'gpid'=>0],['gid'=>11,'count'=>5,'gpid'=>0]]],['shop_id'=>'8','goods'=>[['gid'=>20,'count'=>2,'gpid'=>0],['gid'=>21,'count'=>3,'gpid'=>0]]]];
//        $uid      = 103;
//
//        if (array_key_exists('shop_id',$cartArr)) { // 单店铺
//            $this->createCommonOrder($cartArr,$uid);
//        } else { // 多店铺
//            foreach ($cartArr as $key => $val) {
//                $this->createCommonOrder($val,$uid);
//            }
//        }

//        $this->deliverGoods('sg1802071549051504867');

//        $this->receiveGoods('sg1802071549051504867');

//        $this->judgeGoods('14',4,'加油!');
    }

    /**
     * 模拟创建一些订单
     * 相关表
     * order
     * order_goods
     * goods
     * goods_price
     * shop
     */
    public function createCommonOrder($cartArr = [],$uid = 101){
        $goodsModel = new GoodsModel();
        $goodsPriceModel = new GoodsPriceModel();

        $orderModel = new OrderModel();
        $orderGoodsModel = new OrderGoodsModel();

        // 单店铺单商品订单
        // 单店铺
        if (count($cartArr['goods'])==count($cartArr['goods'], 1)) {
            // 单商品
            $dataOrder = [];
            $dataOrderGoods = [];
            // 获取商品信息
            $goodsData = $goodsModel->findData(['gid'=>$cartArr['goods']['gid']]);
            if ($cartArr['goods']['gpid'] == 0) {
                $goodsPrice = $goodsData['price'];
                $agentPrice = $goodsData['agent_price'];
            } else {
                $goodsPriceData = $goodsPriceModel->findData(['gpid'=>$cartArr['goods']['gpid']]);
                $goodsPrice = $goodsPriceData['price'];
                $agentPrice = $goodsPriceData['agent_price'];
            }
            $allGoodsPrice = $goodsPrice * $cartArr['goods']['count'];
            $allAgentPrice = $agentPrice * $cartArr['goods']['count'];
            $postPrice  = 0; // 包邮

            $dataOrder['order_no'] = buildOrderNo('sg'); //订单号生成函数 buildOrderNo('shopgo')
            $dataOrder['is_purchase'] = 2; // 非采购订单
            $dataOrder['shop_id'] = $cartArr['shop_id'];
            $dataOrder['agent_shop_id'] = 0; // 非分销店铺商品
            $dataOrder['uid'] = $uid;
            $dataOrder['goods_count'] = $cartArr['goods']['count'];
            $dataOrder['post_money'] = $postPrice; // 包邮
            $dataOrder['order_money'] = $allGoodsPrice + $postPrice; // 订单总价
            $dataOrder['pay_money'] = $allGoodsPrice + $postPrice; // 支付金额
            $dataOrder['redmoney_purpose'] = 0; // 红包抵扣金额
            $dataOrder['bonus_purpose'] = 0; // 赏金抵扣金额
            $dataOrder['coupon_purpose'] = 0; // 券优惠金额
            $dataOrder['goods_money'] = $allGoodsPrice; // 商品总价
            $dataOrder['agent_money'] = $allAgentPrice; // 分销总价
            $dataOrder['refund_money'] = 0; // 退款金额
            $dataOrder['pay_type']     = 1; // 微信
            $dataOrder['add_time']     = date('Y-m-d H:i:s'); // 下单时间
            $dataOrder['pay_time']     = date('Y-m-d H:i:s'); // 支付时间
//                $dataOrder['receive_time']     = ''; // 订单收货时间
//                $dataOrder['deal_time']     = ''; // 订单操作时间

            $dataOrder['express_type']     = ''; // 快递类型
            $dataOrder['express_no']     = ''; // 快递单号
            $dataOrder['pay_status']     = 2; // 已支付

            $dataOrder['user_remark']     = "什么时候发货?"; // 用户留言
            $dataOrder['shop_remark']     = "马上发货"; // 用户留言

            $dataOrder['comment']     = 1; // 未评价
            $dataOrder['status']     = 2; // 已付款待发货
            $dataOrder['close_reason']     = ''; // 订单关闭原因
            $dataOrder['back_status'] = 0; // 退款状态
            $dataOrder['is_del'] = 0; // 未删除
            $dataOrder['order_type'] = 1; // 普通订单


            $dataOrder['group_hours'] = 0; // 成团时间
            $dataOrder['group_done'] = 0; // 否
            $dataOrder['group_neednum'] = 0; // 拼团差的人数
            $dataOrder['group_oid'] = 0; // 拼主订单id
            $dataOrder['origin_oid'] = 0; // 原始订单id

            $orderModel->startTrans();

            $new_oid = $orderModel->addData($dataOrder);
            if ($new_oid) { // 生成订单商品数据
                $dataOrderGoods['shop_id'] = $cartArr['shop_id'];
                $dataOrderGoods['agent_shop_id'] = 0;
                $dataOrderGoods['oid']     = $new_oid;
                $dataOrderGoods['gid']     = $cartArr['goods']['gid'];
                $dataOrderGoods['goods_count'] = $cartArr['goods']['count'];
                $dataOrderGoods['back_money_able'] = $allGoodsPrice;
                $dataOrderGoods['agent_price'] = $allAgentPrice;
                $dataOrderGoods['post_price'] = 0;
                $dataOrderGoods['back_status'] = 0;
                $dataOrderGoods['sku_goods_json'] = '';
                $dataOrderGoods['complain_status'] = 0;
                $dataOrderGoods['gpid'] = $cartArr['goods']['gpid'];
                $dataOrderGoods['torderno'] = '';
                $dataOrderGoods['platform'] = 1; // 拼多多

                $res = $orderGoodsModel->addData($dataOrderGoods);
            }

            if ($new_oid && $res) {
                $orderModel->commit();
            } else {
                $orderModel->rollback();
            }

            echo "成功生成订单".$new_oid."\n";

        } else {
            // 多商品
            $dataOrder = [];
            $dataOrderGoods = [];

            $allGoodsPrice = 0;
            $allAgentPrice = 0;
            $allGoodsCount = 0;
            // 获取商品信息
            foreach ($cartArr['goods'] as $key => $val) {
                $goodsData = $goodsModel->findData(['gid'=>$val['gid']]);

                if ($val['gpid'] == 0) {
                    $goodsPrice = $goodsData['price'];
                    $agentPrice = $goodsData['agent_price'];
                } else {
                    $goodsPriceData = $goodsPriceModel->findData(['gpid'=>$val['gpid']]);
                    $goodsPrice = $goodsPriceData['price'];
                    $agentPrice = $goodsPriceData['agent_price'];
                }
                $allGoodsPrice += $goodsPrice * $val['count'];
                $allAgentPrice += $agentPrice * $val['count'];
                $allGoodsCount += $val['count'];
            }


            $postPrice  = 0; // 包邮

            $dataOrder['order_no'] = buildOrderNo('sg'); //订单号生成函数 buildOrderNo('shopgo')
            $dataOrder['is_purchase'] = 2; // 非采购订单
            $dataOrder['shop_id'] = $cartArr['shop_id'];
            $dataOrder['agent_shop_id'] = 0; // 非分销店铺商品
            $dataOrder['uid'] = $uid;
            $dataOrder['goods_count'] = $allGoodsCount;
            $dataOrder['post_money'] = $postPrice; // 包邮
            $dataOrder['order_money'] = $allGoodsPrice + $postPrice; // 订单总价
            $dataOrder['pay_money'] = $allGoodsPrice + $postPrice; // 支付金额
            $dataOrder['redmoney_purpose'] = 0; // 红包抵扣金额
            $dataOrder['bonus_purpose'] = 0; // 赏金抵扣金额
            $dataOrder['coupon_purpose'] = 0; // 券优惠金额
            $dataOrder['goods_money'] = $allGoodsPrice; // 商品总价
            $dataOrder['agent_money'] = $allAgentPrice; // 分销总价
            $dataOrder['refund_money'] = 0; // 退款金额
            $dataOrder['pay_type']     = 1; // 微信
            $dataOrder['add_time']     = date('Y-m-d H:i:s'); // 下单时间
            $dataOrder['pay_time']     = date('Y-m-d H:i:s'); // 支付时间
//                $dataOrder['receive_time']     = ''; // 订单收货时间
//                $dataOrder['deal_time']     = ''; // 订单操作时间

            $dataOrder['express_type']     = ''; // 快递类型
            $dataOrder['express_no']     = ''; // 快递单号
            $dataOrder['pay_status']     = 2; // 已支付

            $dataOrder['user_remark']     = "什么时候发货?"; // 用户留言
            $dataOrder['shop_remark']     = "马上发货"; // 用户留言

            $dataOrder['comment']     = 1; // 未评价
            $dataOrder['status']     = 2; // 已付款待发货
            $dataOrder['close_reason']     = ''; // 订单关闭原因
            $dataOrder['back_status'] = 0; // 退款状态
            $dataOrder['is_del'] = 0; // 未删除
            $dataOrder['order_type'] = 1; // 普通订单


            $dataOrder['group_hours'] = 0; // 成团时间
            $dataOrder['group_done'] = 0; // 否
            $dataOrder['group_neednum'] = 0; // 拼团差的人数
            $dataOrder['group_oid'] = 0; // 拼主订单id
            $dataOrder['origin_oid'] = 0; // 原始订单id

            $orderModel->startTrans();

            $err_count = 0;
            $new_oid = $orderModel->addData($dataOrder);
            if (!$new_oid) {
                $err_count ++ ;
            }


            if ($new_oid) { // 生成订单商品数据
                foreach ($cartArr['goods'] as $key => $val) {
                    $goodsData = $goodsModel->findData(['gid'=>$val['gid']]);

                    if ($val['gpid'] == 0) {
                        $goodsPrice = $goodsData['price'];
                        $agentPrice = $goodsData['agent_price'];
                    } else {
                        $goodsPriceData = $goodsPriceModel->findData(['gpid'=>$val['gpid']]);
                        $goodsPrice = $goodsPriceData['price'];
                        $agentPrice = $goodsPriceData['agent_price'];
                    }

                    $dataOrderGoods['shop_id'] = $cartArr['shop_id'];
                    $dataOrderGoods['agent_shop_id'] = 0;
                    $dataOrderGoods['oid']     = $new_oid;
                    $dataOrderGoods['gid']     = $val['gid'];
                    $dataOrderGoods['goods_count'] = $val['count'];
                    $dataOrderGoods['back_money_able'] = $goodsPrice * $val['count'];
                    $dataOrderGoods['agent_price'] = $agentPrice * $val['count'];
                    $dataOrderGoods['post_price'] = 0;
                    $dataOrderGoods['back_status'] = 0;
                    $dataOrderGoods['sku_goods_json'] = '';
                    $dataOrderGoods['complain_status'] = 0;
                    $dataOrderGoods['gpid'] = $val['gpid'];
                    $dataOrderGoods['torderno'] = '';
                    $dataOrderGoods['platform'] = 1; // 拼多多
                    $res = $orderGoodsModel->addData($dataOrderGoods);
                    if (!$res) {
                        $err_count ++ ;
                    }
                }

            }

            if ($err_count == 0) {
                $orderModel->commit();
            } else {
                $orderModel->rollback();
            }

            echo "成功生成订单".$new_oid."\n";

        }

    }

    /**
     * 模拟订单发货
     * 相关表
     * order
     */
    public function deliverGoods($order_no,$express_type='shunfeng',$express_no='930905390299') {
        // 判断订单是否已经支付
        $orderModel = new OrderModel();
        $orderInfo = $orderModel->findData(['order_no'=>$order_no]);

        $orderData = [];

        if (!$orderInfo) {
            $this->outData['code'] = 1;
            $this->outData['msg']  = "订单不存在";
            $this->printOut();
        }

        if ($orderInfo['status'] == 1) {
            $this->outData['code'] = 1;
            $this->outData['msg']  = "订单待付款";
            $this->printOut();
        }

        if ($orderInfo['status'] == 3) {
            $this->outData['code'] = 1;
            $this->outData['msg']  = "订单已发货";
            $this->printOut();
        }

        if ($orderInfo['status'] == 2) {
            // 处理订单发货
            $orderData['express_type'] = $express_type;
            $orderData['express_no']   = $express_no;
            $orderData['status']       = 3; // 已发货
            $res = $orderModel->editData(['order_no'=>$order_no],$orderData);
            if ($res) {
                $this->outData['msg']  = "操作成功";
                $this->printOut();
            }
        }

        $this->outData['code'] = 1;
        $this->outData['msg']  = "操作失败";
        $this->printOut();

    }

    /**
     * 模拟订单收货,不涉及到金钱分配
     * 相关表
     * order
     */
    public function receiveGoods($order_no) {
        $orderModel = new OrderModel();
        $orderInfo = $orderModel->findData(['order_no'=>$order_no]);
        if (!$orderInfo) {
            $this->outData['code'] = 1;
            $this->outData['msg']  = "订单不存在";
            $this->printOut();
        }

        if ($orderInfo['status'] < 3) {
            $this->outData['code'] = 1;
            $this->outData['msg']  = "订单尚未发货";
            $this->printOut();
        }

        if ($orderInfo['status'] == 4) {
            $this->outData['code'] = 1;
            $this->outData['msg']  = "订单已完成";
            $this->printOut();
        }

        if ($orderInfo['status'] == 3) {
            // 处理订单收货
            $orderData['status']       = 4; // 交易完成
            $res = $orderModel->editData(['order_no'=>$order_no],$orderData);
            if ($res) {
                $this->outData['msg']  = "操作成功";
                $this->printOut();
            }
        }

        $this->outData['code'] = 1;
        $this->outData['msg']  = "操作失败";
        $this->printOut();
    }

    /**
     * 模拟实现订单评论
     * 相关表
     * order
     * order_goods
     * order_goods_judge
     * goods
     */
    public function judgeGoods($ogid,$score = 5,$info = "挺好的") {
        // 判断订单商品是否存在
        $orderGoodsModel = new OrderGoodsModel();
        $orderGoodsInfo  = $orderGoodsModel->findData(['ogid'=>$ogid]);
        if (!$orderGoodsInfo) {
            $this->outData['code'] = 1;
            $this->outData['msg']  = "订单商品不存在";
            $this->printOut();
        }

        // 判断商品是否已评价
        $orderGoodsJudgeModel = new OrderGoodsJudgeModel();
        $orderGoodsJudgeInfo = $orderGoodsJudgeModel->findData(['ogid'=>$ogid]);
        if ($orderGoodsJudgeInfo) {
            $this->outData['code'] = 1;
            $this->outData['msg']  = "订单商品已评价";
            $this->printOut();
        }

        // 获取用户信息
        $orderModel = new OrderModel();
        $orderInfo = $orderModel->findData(['oid'=>$orderGoodsInfo['oid']]);
        // 判断订单是否已完成
        if ($orderInfo['status'] != 4) {
            $this->outData['code'] = 1;
            $this->outData['msg']  = "非已完成订单,不可评论";
            $this->printOut();
        }

        $orderGoodsJudgeData = [];
        $orderGoodsJudgeData['ogid'] = $ogid;
        $orderGoodsJudgeData['shop_id'] = $orderGoodsInfo['shop_id'];
        $orderGoodsJudgeData['gid'] = $orderGoodsInfo['gid'];
        $orderGoodsJudgeData['score'] = $score;
        $orderGoodsJudgeData['info'] = $info;



        // 获取用户信息
        $userModel = new UserModel();
        $userInfo = $userModel->findData(['uid'=>$orderInfo['uid']]);

        $orderGoodsJudgeData['uid'] = $userInfo['uid'];
        $orderGoodsJudgeData['uname'] = $userInfo['nick_name'];

        $orderGoodsJudgeData['add_time'] = date('Y-m-d H:i:s');
        $orderGoodsJudgeData['status'] = 1;
        $res = $orderGoodsJudgeModel->addData($orderGoodsJudgeData);

        if ($res) {
            $this->outData['msg']  = "评论成功";
            $this->printOut();
        }

        $this->outData['code'] = 1;
        $this->outData['msg']  = "操作失败";
        $this->printOut();

    }


}