Laravel 項(xiàng)目開發(fā)規(guī)范 Testing 規(guī)范

2023-02-16 17:12 更新

漸進(jìn)式測(cè)試

100% 的測(cè)試覆蓋率,需要花費(fèi)在測(cè)試代碼上的工時(shí),絲毫不亞于業(yè)務(wù)代碼的開發(fā)時(shí)間。

如開發(fā) Deadline 不允許,做不到 100% 測(cè)試覆蓋率,應(yīng)該考慮對(duì)程序入口進(jìn)行測(cè)試。這種方式的時(shí)間利用比最高。

Laravel 項(xiàng)目中程序入口,一般有以下四種:

  • Web —— 程序的網(wǎng)頁(yè)模塊;
  • API —— 程序的 API 模塊;
  • Admin —— 管理員后臺(tái)頁(yè)面;
  • Job —— 隊(duì)列任務(wù);
  • Command —— 自定義的 Artisan 命令行。

對(duì)這些入口進(jìn)行 100% 的測(cè)試覆蓋,可以很大范圍內(nèi)測(cè)試到項(xiàng)目代碼。

測(cè)試速度

編寫測(cè)試時(shí),必須永遠(yuǎn)把執(zhí)行速度放在首位。

單元測(cè)試

所有的單元測(cè)試,都必須放置于 tests/Unit 目錄下。且必須使用子目錄存儲(chǔ),絕不直接放置于此目錄下。

集成測(cè)試

所有的集成測(cè)試,都必須放置于 tests/Feature 目錄下。且必須使用子目錄存儲(chǔ),絕不直接放置于此目錄下。

常見的子目錄按照入口,應(yīng)該劃分如下:

├── API
├── Web
├── Admin
├── Command
└── Job

Fixture 數(shù)據(jù)

測(cè)試中使用到樣例數(shù)據(jù),必須放置于 tests/Fixtures 目錄中。且必須使用子目錄存儲(chǔ),絕不直接放置于此目錄下。

運(yùn)行多個(gè)環(huán)境

測(cè)試代碼必須在開發(fā)同事的機(jī)器上能運(yùn)行,測(cè)試必須在 Beta 環(huán)境下能運(yùn)行。

并發(fā)測(cè)試

所有的測(cè)試,都 必須 支持并發(fā)測(cè)試,這樣可以極大節(jié)省 CI 中測(cè)試運(yùn)行的時(shí)間,提高整個(gè)工作流的速度。

每次提交代碼前,使用以下命令跑一下不報(bào)錯(cuò)即可:

php artisan test -p

支持并發(fā)測(cè)試:

composer require brianium/paratest

用例測(cè)試而不是代碼測(cè)試

寫 Feature Test 的時(shí)候,必須使用用例測(cè)試(User Story),而不是代碼測(cè)試。

?代碼測(cè)試的例子:

// tests/Feature/API/V1/UserAddressControllerTest.php

class UserAddressControllerTest extends APITest
{
    public function test_controller_index_method()
    {
    }

    public function test_controller_create_method()
    {
    }
}

? 用例測(cè)試:

// tests/Feature/API/V1/UserAddressControllerTest.php

class UserAddressControllerTest extends APITest
{
    public function test_user_can_view_user_address_index()
    {
    }

    public function test_guest_can_not_create_user_address()
    {
    }

    public function test_user_can_create_user_address()
    {
    }
}

絕不測(cè)試第三方服務(wù)

程序中經(jīng)常會(huì)使用第三方服務(wù),例如發(fā)送郵件使用 SendCloud 的 API 、或發(fā)送短信 API。

將這些服務(wù) API 調(diào)用封裝到 Service 層,編寫測(cè)試代碼時(shí),對(duì)其進(jìn)行 Mock 。

建議:檢測(cè)測(cè)試代碼是否使用第三方服務(wù),最好的方法就是把 Wifi 關(guān)掉,然后跑一遍測(cè)試。如果有錯(cuò)誤發(fā)生,證明調(diào)用了第三方 API。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)