PHPUnit實踐一(初識)

本系列教程全部的PHPUnit測試基於PHPUnit6.5.9版本,Lumen 5.5框架php

前置

平常咱們的普通用到的測試:html

  1. 代碼直接echo,debug等方法測試 -> 跟蹤細節斷點型測試
  2. log日誌輔助測試 -> 跟蹤細節斷點型測試
  3. 輔助工具,postman之類的作請求類測試->請求類測試
  4. 瀏覽器直接測試->瀏覽器測試

單元測試

單元測試是針對程序的最小單元來進行正確性檢驗的測試工做,程序單元就是應用的最小可測試部件,一個單元多是單個程序,類,對象,方法等程序員

單元測試是用來測試包或者程序的一部分代碼或者一組代碼的函數。測試的目的是確認目標代碼在給定的場景下,有沒有按照指望工做。web

一個場景是正向路經測試,就是在正常執行的狀況下,保證代碼不產生錯誤的測試。這種測試能夠用來確認代碼能夠成功地向數據庫中插入一條工做記錄。數據庫

另一些單元測試可能會測試負向路徑的場景,保證代碼不只會產生錯誤,並且是預期的錯誤。api

這種場景下的測試多是對數據庫進行查詢時沒有找到任何結果,或者對數據庫作了無效的更新。瀏覽器

在這兩種狀況下,測試都要驗證確實產生了錯誤,且產生的是預期的錯誤。總之,無論如何調用或者執行代碼,所寫的代碼行爲都是可預期的框架

優勢或改善解決問題

  1. 減小bug函數

    經過運行單元測試能夠直接測試各個功能的正確性,有bug能夠直接發現並解決,若是要等到跟其餘的功能對接,進行連貫測試,測試比較麻煩,並且bug不能及早的發現並解決
  2. 快速定位bug工具

    若是是web項目的某一個功能,日常咱們定位bug多是頁面輸入值,後臺斷點,一步一步的須要bug位置,若是有編寫單元測試,則能夠直接修改數據,運行單元測試便可,快速有限
  3. 提升代碼質量

    若是每個部件都是完美的,那麼組合起來確定也是完美的。總體代碼質量就獲得了保障
  4. 減小調試時間

    當不知問題所在的時候,可能須要各類調試與運行,而若是全部的都有編寫單元測試,那麼能夠直接運行單元測試,就能定位問題所在位置。

PHPUnit

PHPUnit是一個面向PHP程序員的測試框架,這是一個xUnit的體系結構的單元測試框架。

版本

主版本 初始版本 PHP兼容性 支持 後臺框架對應版本
PHPUnit 8 2019年2月1日 PHP 7.2, PHP 7.3, PHP 7.4 在2021年2月5日結束支持
PHPUnit 7 2018年2月2日 PHP 7.1, PHP 7.2, PHP 7.3 在2020年2月7日結束支持
PHPUnit 6 2017年2月3日 PHP 7.0, PHP 7.1, PHP 7.2 在2019年2月1日結束支持 *
PHPUnit 5 2015年10月2日 PHP 5.6, PHP 7.0, PHP 7.1 在2018年2月2日結束支持
PHPUnit 4 2014年3月7日 PHP 5.3, PHP 5.4, PHP 5.5, PHP 5.6 在2017年2月3日結束支持

你的第一個單元測試demo

目錄結構

tests
├── ExampleTest.php 測試用例
└── TestCase.php Lumen自帶測試基類,繼承PHPunit

代碼

<?php

class ExampleTest extends TestCase
{
    /**
     * 測試斷言成功.
     *
     * @return void
     */
    public function testTrue()
    {
        $this->assertTrue(true);
    }
    
    /**
     * 測試斷言失敗
     *
     * @return void
     */
    public function testFailure()
    {
        $this->assertTrue(false);
    }
    
    /**
     * 測試不加斷言,risky.
     *
     * @return void
     */
    public function testRisky()
    {
    }
}

運行

../vendor/bin/phpunit ExampleTest.php

輸出

PHPUnit 6.5.9 by Sebastian Bergmann and contributors.

.FR                                                                 3 / 3 (100%)

Time: 902 ms, Memory: 10.00MB

There was 1 failure:

1) ExampleTest::testFailure
Failed asserting that false is true.

/web/www/wpt/gt-api/tests/ExampleTest.php:22

--

There was 1 risky test:

1) ExampleTest::testRisky
This test did not perform any assertions

FAILURES!
Tests: 3, Assertions: 2, Failures: 1, Risky: 1.

說明

3個測試方法,2個斷言 一個斷言失敗,一個測試方法無斷言

輸出標識說明

.
當測試成功時輸出。

F
當測試方法運行過程當中一個斷言失敗時輸出。

E
當測試方法運行過程當中產生一個錯誤時輸出。

R
當測試被標記爲有風險時輸出。

S
當測試被跳過期輸出。

I
當測試被標記爲不完整或未實現時輸出。

參考

PHPUnit 6.5 官方文檔

相關文章
相關標籤/搜索