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 协议》,转载必须注明作者和本文链接