Laravel 单元测试实战(3)- 编写集成测试确保接口和数据库代码正确

Laravel 单元测试实战(3)- 编写集成测试确保接口和数据库代码正确

github 项目地址

git clone https://gitee.com/three_kingdoms_of_zhang/unit_test_practice.git
composer install
git checkout v3.0

代码是完整的,包括迁移,模型类,和全部功能。

最后编写一个集成测试代码,对数据库连接和控制器代码和 service 代码一起测试

<?php

namespace Tests\Feature;

use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\DatabaseTestCase;
use Tests\TestCase;

class OrderControllerTest extends DatabaseTestCase
{
    /**
     * A basic test example.
     *
     * @return void
     */
    public function testBasicTest()
    {
        $response = $this->postJson('/api/find_user_coupon', [
            'user_id' =>1,
            'shopping_cart'=>[
                [
                    'goods_id' => 1,
                    'count' => 3,
                ],
                [
                    'goods_id' => 2,
                    'count' => 1,
                ],
                [
                    'goods_id' => 3,
                    'count' => 2,
                ],
            ],
        ]);

        $response->assertStatus(200);
        $data = $response->getContent();
        $data = json_decode($data,1);
        $result = $data['data'];

        $result_expect = [
            'saved_money' =>11,
            'user_coupon_record'=>[
                'id' => 4,
                'type' => 2,
                'coupon_value' => 0.9,
                'condition_money' => 50,
            ],
        ];
        $this->assertEqualsWithDelta($result['saved_money'], $result_expect['saved_money'],0.02);
        $this->assertEquals($result['user_coupon_record']['id'], $result_expect['user_coupon_record']['id']);



    }

    public function get_table_datas()
    {
        return <<<sql
goods:
  -
    id: 1
    goods_name: "商品1"
    price: 10
  -
    id: 2
    goods_name: "商品2"
    price: 20
  -
    id: 3
    goods_name: "商品3"
    price: 30

user_coupons:
  -
    id: 1
    type: 1
    coupon_value: 5
    coupon_name: "优惠券1"
    condition_money: 1000
    use_status: 0
    user_id: 1
  -
    id: 2
    type: 1
    coupon_value: 5
    coupon_name: "优惠券2"
    condition_money: 50
    use_status: 0
    user_id: 1    
  -
    id: 4
    type: 2
    coupon_value: 0.9
    coupon_name: "优惠券4"
    condition_money: 50
    use_status: 0
    user_id: 1    
  -
    id: 5
    type: 1
    coupon_value: 6
    coupon_name: "优惠券5"
    condition_money: 50
    use_status: 0
    user_id: 1    

sql;

    }
}

执行集成测试

./vendor/bin/phpunit ./tests/Feature/OrderControllerTest.php

会显示测试通过。

总结:

补齐集成测试。带上数据库,彻底验证接口的正确性。
最后,该程序还有未验证入参的问题,还有,单元测试应该多搞几套数据,测试各种情况。包括边界条件等。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!