PHPUnit 自動化測試大作戰【CH06】

閱讀時間約 9 分鐘

今天會再與大家介紹幾個資料庫 Assertion 函數,與陣列 Assertion 函數。

與前一篇一樣,以下會提到的資料庫 Assertion 函數,並非 PHPUnit 內建,而是由 Laravel 所擴充,因此需注意是否有確實引用到 use Tests\\TestCase 。最後面介紹的2個陣列 Assertion 函數,則是PHPUnit內建的。

在介紹資料庫 Assertion 函數前,要先請大家在根目錄下的 phpunit.xml 的 <php> 標籤內,加入以下 <env> 子標籤:

<php>

<-- ...前略...-> <env name="DB_CONNECTION" value="sqlite"/>

<env name="DB_DATABASE" value=":memory:"/>

<-- ...後略...-></php>

這2個設定值,會在執行PHPUnit測試時,暫時使用 phpunit.xml 內 <env> 所設定的資料庫環境變數值,以避免改變到實際資料庫的資料。同時,在資料庫 Assertion 函數的實作範例中,皆會使用到 Illuminate\\Foundation\\Testing\\RefreshDatabase 這個 Trait,惟今天的內文中僅會展示如何使用它,之後會再安排篇幅與大家分享,請大家拭目以待。

讓讓我們看看吧!

資料庫

assertDatabaseCount

  • 函數簽名assertDatabaseCount($table, int $count, $connection = null)
  • 函數說明: 此函數可以驗證,指定資料庫連線下,指定資料表是否含有指定數量之資料。當沒有指定資料庫連線時,將會使用預設資料庫連線。
  • 實作範例
<?php

namespace Tests\Feature;

use Illuminate\Foundation\Testing\RefreshDatabase;

use Tests\TestCase;

class DatabaseTest extends TestCase{

use RefreshDatabase;

/** * Example for assertDatabaseCount() * @return void */

public function testAssertDatabaseCount() {

// 假設 users 資料表中有1筆資料,則以下 Assestion 將通過測試

$this->assertDatabaseCount('users', 1);

}}

assertDatabaseHas

  • 函數簽名assertDatabaseHas($table, array $data, $connection = null)
  • 函數說明: 此函數可以驗證,指定資料庫連線下,指定資料表是否含有指定資料結構與值之資料。與前一函數相同,當沒有指定資料庫連線時,將會使用預設資料庫連線。
  • 實作範例
<?php

namespace Tests\Feature;

use Illuminate\Foundation\Testing\RefreshDatabase;

use Tests\TestCase;

class DatabaseTest extends TestCase{

use RefreshDatabase;

/** * Example for assertDatabaseHas() * @return void */

public function testAssertDatabaseHas() {

// 假設 users 資料表中至少有1筆資料

// 其 email 欄位值為 [email protected]

// 則以下 Assestion 將通過測試

$this->assertDatabaseHas('users', [

'email' => '[email protected]'

]); }}

assertDatabaseMissing

  • 函數簽名assertDatabaseMissing($table, array $data, $connection = null)
  • 函數說明: 此函數可以驗證,指定資料庫連線下,指定資料表是否  含有指定資料結構與值之資料。與前一函數相同,當沒有指定資料庫連線時,將會使用預設資料庫連線。
  • 實作範例
<?php

namespace Tests\Feature;

use Illuminate\Foundation\Testing\RefreshDatabase;

use Tests\TestCase;

class DatabaseTest extends TestCase{

use RefreshDatabase;

/** * Example for assertDatabaseHas() * @return void */

public function testAssertDatabaseHas() {

// 假設 users 資料表中至少有1筆資料

// 其 email 欄位值為 [email protected]

// 則以下 Assestion 將通過測試

$this->assertDatabaseHas('users', [

'email' => '[email protected]'

]); }}

陣列

assertArrayHasKey

  • 函數簽名assertArrayHasKey($key, $array, string $message = '')
  • 函數說明: 這個函數相當單純,可檢查第2個參數中,是否含有第2個參數所述之鍵。
  • 實作範例
/** * Example for assertArrayHasKey() * @return void */

public function testAssertArrayHasKey(){

$array = ['key' => 'value'];

$this->assertArrayHasKey($array, 'key');

}

assertJsonStringEqualsJsonString

  • 函數簽名assertJsonStringEqualsJsonString(string $expectedJson, string $actualJson, string $message = '')
  • 函數說明: 有時會需要驗證結構比較複雜的關聯式陣列,但PHPUnit被未提供相對應的關聯式陣列 Assertion 函數,這時候便可使用此函數,將欲驗證之值先做 json_encode ,代入第2參數,並將期望的關聯式陣列結構與值,以JSON String的形式代入第1個參數。
  • 實作範例
/** * Example for assertJsonStringEqualsJsonString() * @return void */

public function testAssertJsonStringEqualsJsonString(){

$array = [

'key' => 'value',

'object1' => [

'array' => [1, 2, 3,]

], ]; $this->assertJsonStringEqualsJsonString(

'{"object1":{"array":[1,2,3]},"key":"value"}',

json_encode($array)

);}

以上就是今天的介紹,到今天為止,已經學到了20+個 Assertion 函數,是不是覺得很充實呢!

下一篇我們來將這幾天學到的 Assertion 函數,實際運用到撰寫 API 自動話測試吧!

如果您喜歡這篇文章,歡迎加入追蹤以接收新文章通知 😄

參考資料

本系列文章目錄

8會員
224內容數
歡迎來到 WilliamP 的沙龍天地,在這裡將與各位讀者探討各種主題,包刮高中數學題庫、PHP開發經驗、LINE聊天機器人開發經驗、書摘筆記等,歡迎交流!
留言0
查看全部
發表第一個留言支持創作者!
WilliamP的沙龍 的其他內容
前一天與大家分享了幾個通用型 Assertion 函數,今天來為大家介紹幾個 HTTP 相關的 Assertion 函數吧! 今天要介紹的各函數,其使用方式和前一天所介紹的略有不同。以下所列各函數,皆是基於 HTTP Response 來做驗證測試,因此大家會看到 $response = $thi
前一天我們實作了第一個測試,我們學到了第一個 Assert 函數 assertEquals。 今天讓我們來了解其他常用的 Assert 函數吧! 通用型 Assertion 函數 assertEmpty 函數簽名:assertEmpty(mixed $actual[, string $mess
今天我們來寫第一個單元測試吧! 不過在那之前,先讓我們了解單元測試的「3個A」 單元測試3A 所謂的「3個A」,是指以下三個英文單字: Arrange:初始化工作,如準備假資料 Act:執行測試對象 Assert:驗證結果 一個良好的單元測試案例,應該包含以上的結構, 依序執行 Arra
下載與設定 Laradock 首先,讓我們在Home資料夾下,將 Laradock 下載下來: cd ~ && git clone <https://github.com/Laradock/laradock.git> Laradock 將 Laradock 下載回來後,切換到 Laradock
初遇自動化測試 在數年前,我剛從第一份工作離職,轉職到第二份工作, 新工作是在一個大集團的IT部門,職位是後端工程師。 當時集團正準備導入一個由子公司開發的微服務系統, 使用的技術是PHP 8 及 Laravel 9 因為該系 統在子公司運作得不錯, 因此集團高層想將它擴展成,全集團都可使用的規模
前一天與大家分享了幾個通用型 Assertion 函數,今天來為大家介紹幾個 HTTP 相關的 Assertion 函數吧! 今天要介紹的各函數,其使用方式和前一天所介紹的略有不同。以下所列各函數,皆是基於 HTTP Response 來做驗證測試,因此大家會看到 $response = $thi
前一天我們實作了第一個測試,我們學到了第一個 Assert 函數 assertEquals。 今天讓我們來了解其他常用的 Assert 函數吧! 通用型 Assertion 函數 assertEmpty 函數簽名:assertEmpty(mixed $actual[, string $mess
今天我們來寫第一個單元測試吧! 不過在那之前,先讓我們了解單元測試的「3個A」 單元測試3A 所謂的「3個A」,是指以下三個英文單字: Arrange:初始化工作,如準備假資料 Act:執行測試對象 Assert:驗證結果 一個良好的單元測試案例,應該包含以上的結構, 依序執行 Arra
下載與設定 Laradock 首先,讓我們在Home資料夾下,將 Laradock 下載下來: cd ~ && git clone <https://github.com/Laradock/laradock.git> Laradock 將 Laradock 下載回來後,切換到 Laradock
初遇自動化測試 在數年前,我剛從第一份工作離職,轉職到第二份工作, 新工作是在一個大集團的IT部門,職位是後端工程師。 當時集團正準備導入一個由子公司開發的微服務系統, 使用的技術是PHP 8 及 Laravel 9 因為該系 統在子公司運作得不錯, 因此集團高層想將它擴展成,全集團都可使用的規模
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
練習 PHPUnit 測試的撰寫,依序創建Controller、Service,並針對計算邏輯進行單元測試的練習。
Thumbnail
在 Laravel 中的測試中,PHPUnit 和 Mockery 都可以用來創建測試替身(test double),但它們有不同的方式和功能,以下簡單介紹兩種寫法方式。
前言 基本準備差不多了,也能跑自己的測試,再來就是關於測試腳本的核心:元素定位跟動作,本篇會著重介紹 XPATH 定位的部分
Thumbnail
前言 上篇我們成功執行第一個測試案例,從 Python 腳本透過 Appium 控制模擬器點選設定中的電池,下個問題就是怎麼找元件,這時候就要請出 Appium Inspector 了
前言 經過五個小單元的準備,終於可以開始跑第一個測試了,Appium 本身是個工具,可以搭配各種語言,這邊選擇 Python 作為測試腳本語言,以便之後跟 Robot Framework 串接。
前言 前四篇,把主機作業系統跟待測物準備交代完畢,有需要請自行跳轉取用,接下來就是測試工具的部分,這次測試套件使用大名鼎鼎 Appium 2。 選擇 Appium 2 的理由 歷史悠久:Appium 2012 年公開之後,就廣受測試社群愛戴 站在巨人的肩榜上:架構類似 Selenium的主從式架構,
前言 前幾篇聊到作業系統、Docker 跟 Android 容器的準備,再來就是替 Android 容器開啟 Google Play 套件並安裝待測 App 供後續手動或者自動測試使用。
前言 前兩篇把作業系統跟 Docker 安裝講完了,接下來就是 Android 容器的安裝了,這裡選用 ReDroid ,因為它是開源、高效、又便於管理的方案。
Thumbnail
前言 前篇把 Ubuntu 作業系統的安裝跟準備談完了,有需要可以跳回去看。接下來聊容器服務 Docker 的安裝與使用。 Docker 可以應用的場合很多,這次是會用它來模擬 Android 受測裝置
前言 本 App 自動化測試專題,用來記錄自動化 App 測試的各環節,包含環境準備、套件安裝、腳本編寫、執行測試與整合。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
練習 PHPUnit 測試的撰寫,依序創建Controller、Service,並針對計算邏輯進行單元測試的練習。
Thumbnail
在 Laravel 中的測試中,PHPUnit 和 Mockery 都可以用來創建測試替身(test double),但它們有不同的方式和功能,以下簡單介紹兩種寫法方式。
前言 基本準備差不多了,也能跑自己的測試,再來就是關於測試腳本的核心:元素定位跟動作,本篇會著重介紹 XPATH 定位的部分
Thumbnail
前言 上篇我們成功執行第一個測試案例,從 Python 腳本透過 Appium 控制模擬器點選設定中的電池,下個問題就是怎麼找元件,這時候就要請出 Appium Inspector 了
前言 經過五個小單元的準備,終於可以開始跑第一個測試了,Appium 本身是個工具,可以搭配各種語言,這邊選擇 Python 作為測試腳本語言,以便之後跟 Robot Framework 串接。
前言 前四篇,把主機作業系統跟待測物準備交代完畢,有需要請自行跳轉取用,接下來就是測試工具的部分,這次測試套件使用大名鼎鼎 Appium 2。 選擇 Appium 2 的理由 歷史悠久:Appium 2012 年公開之後,就廣受測試社群愛戴 站在巨人的肩榜上:架構類似 Selenium的主從式架構,
前言 前幾篇聊到作業系統、Docker 跟 Android 容器的準備,再來就是替 Android 容器開啟 Google Play 套件並安裝待測 App 供後續手動或者自動測試使用。
前言 前兩篇把作業系統跟 Docker 安裝講完了,接下來就是 Android 容器的安裝了,這裡選用 ReDroid ,因為它是開源、高效、又便於管理的方案。
Thumbnail
前言 前篇把 Ubuntu 作業系統的安裝跟準備談完了,有需要可以跳回去看。接下來聊容器服務 Docker 的安裝與使用。 Docker 可以應用的場合很多,這次是會用它來模擬 Android 受測裝置
前言 本 App 自動化測試專題,用來記錄自動化 App 測試的各環節,包含環境準備、套件安裝、腳本編寫、執行測試與整合。