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

閱讀時間約 18 分鐘

前一天我們實作了第一個測試,我們學到了第一個 Assert 函數 assertEquals。 今天讓我們來了解其他常用的 Assert 函數吧!

通用型 Assertion 函數

assertEmpty

  • 函數簽名assertEmpty(mixed $actual[, string $message = ''])
  • 函數說明: 從字面上來解釋,這個函數是用來判斷第1個輸入參數 $actual 是否為 Empty,PHP常見空值可參考PHP官方函數 empty() 的說明。
  • 實作範例
/**  * Example for assertEmpty()  * @return void  */ 

public function testAssertEmpty() {

// 七種「空」值

$emptyArray = [];

$emptyString = '';

$null = null;

$zeroInt = 0;

$zeroFloat = 0.0;

$zeroIntString = '0';

$false = FALSE;
  // 以下各 Assertion 皆會通過測試

$this->assertEmpty($emptyArray); $this->assertEmpty($emptyString); $this->assertEmpty($null); $this->assertEmpty($zeroInt); $this->assertEmpty($zeroFloat); $this->assertEmpty($zeroIntString); $this->assertEmpty($false); }

要特別注意的是, "0" 會被認定為空值,但 "0.0" 卻不會,這點要小心。

assertEquals

  • 函數簽名: assertEquals(mixed $expected, mixed $actual[, string $message = ''])
  • 函數說明: 此函數可用以判斷,第1個參數 $expected 與第2個參數 $actual,兩者之值是否相等。
  • 實作範例
/**  * Example for assertEquals()  * @return void  */ 

public function testAssertEquals() {

// 範例值

$string = 'string';

$intOne = 1;

$intZero = 0;

$floatOne = 1.0;

$floatZero = 0.0;

$array1 = [];

$array2 = ['string'];

$stdClass1 = new \\stdClass();

$stdClass1->a_field = 'a';

$stdClass2 = new \\stdClass();

$stdClass2->a_field = 'a';
  // 以下各 Assertion 皆會通過測試     

$this->assertEquals('string', $string); $this->assertEquals(1, $intOne); $this->assertEquals(0, $intZero); $this->assertEquals(1.0, $floatOne); $this->assertEquals(0.0, $floatZero); $this->assertEquals([], $array1); $this->assertEquals(['string'], $array2); $this->assertEquals($stdClass1, $stdClass2); // 以下為非相同資料型態,但會判定為相等的情況

$this->assertEquals($intOne, $floatOne); $this->assertEquals($intZero, $floatZero); }

要特別注意的是,$intOne 會被認定為與 $floatOne 相等,$intZero 與 $floatZero 也是。

assertSame

  • 函數簽名assertSame(mixed $expected, mixed $actual[, string $message = ''])
  • 函數說明: 此函數可用以判斷,第1個參數 $expected 與第2個參數 $actual,兩者之資料型態與值是否相等。
  • 實作範例
/**  * Example for assertSame()  * @return void  */ 

public function testAssertSame() {

// 範例值

$string = 'string';

$intOne = 1;

$intZero = 0;

$floatOne = 1.0;

$floatZero = 0.0;

$array1 = [];

$array2 = ['string'];
  // 範例物件     

$stdClass1 = new \\stdClass(); $stdClass1->a_field = 'a'; $stdClass2 = new \\stdClass(); $stdClass2->a_field = 'a'; $stdClass3 = $stdClass2; // 以下各 Assertion 皆會通過測試

$this->assertSame('string', $string); $this->assertSame(1, $intOne); $this->assertSame(0, $intZero); $this->assertSame(1.0, $floatOne); $this->assertSame(0.0, $floatZero); $this->assertSame([], $array1); $this->assertSame(['string'], $array2); // 以下 Assertion 會通過測試,因兩者指向相同的物件參考位置

$this->assertSame($stdClass3, $stdClass2); // 以下為非相同資料型態,但會判定為相等的情況 $this->assertSame($intOne, $floatOne); $this->assertSame($intZero, $floatZero); // 以下 Assertion 將會不通過測試,因兩者所指向之物件參考位置不同

$this->assertSame($stdClass1, $stdClass2); }

值得一提的是,與 assertEquals() 相同的是,$intOne 會被認定為與 $floatOne 相等,$intZero 與 $floatZero 也是;與 assertEquals() 不同的是,它會認定2個擁有相同屬性結構的類別變數是 不同的。

assertTrue

  • 函數簽名: assertTrue(bool $condition[, string $message = ''])
  • 函數說明: 此函數可用以判斷,第1個參數是否為 TRUE 。
  • 實作範例
/**  * Example for assertTrue()  * @return void  */ 

public function testAssertTrue() {

$notEmptyString = 'a';

$notZeroInt = 1;

$notZeroFloat = 0.1;

$stdClass = new \\stdClass();

$true = TRUE;
  // 以下各 Assertion 皆會通過測試     

$this->assertTrue(true); $this->assertTrue($true); $this->assertTrue(1 == 1); $this->assertTrue(1 === 1); $this->assertTrue($true); // 以下 Assertion 將會不通過測試

$this->assertTrue($notEmptyString); $this->assertTrue($notZeroInt); $this->assertTrue($notZeroFloat); $this->assertTrue($stdClass); }

特別注意,assertTrue的第1個參數之資料型態必須是bool,代入字串或其他資料型態都會不通過。

assertFalse

  • 函數簽名assertFalse(bool $condition[, string $message = ''])
  • 函數說明: 與 assertTrue 相對,此函數可用以判斷,第1個參數是否為 FALSE 。
  • 實作範例
/**  * Example for assertFalse()  * @return void  */ 

public function testAssertFalse() {

$notEmptyString = 'a';

$notZeroInt = 1;

$zeroInt = 0;

$notZeroFloat = 0.1;

$zeroFloat = 0.0;

$stdClass = new \\stdClass();

$false = FALSE;
  // 以下各 Assertion 皆會通過測試     

$this->assertFalse(false); $this->assertFalse($false); $this->assertFalse(1 > 1); $this->assertFalse(1 < 1); $this->assertFalse(1 != 1); // 以下 Assertion 將會不通過測試

$this->assertFalse($notEmptyString); $this->assertFalse($notZeroInt); $this->assertFalse($zeroInt); $this->assertFalse($notZeroFloat); $this->assertFalse($zeroFloat); $this->assertFalse($stdClass);}

同樣要注意,assertFalse的第1個參數之資料型態必須是bool,代入字串或其他資料型態都會不通過。

assertIsArray

  • 函數簽名assertIsArray($actual[, $message = ''])
  • 函數說明: 顧名思義,此函數可用來判斷第1個參數是否為 Array 型態。
  • 實作範例
/**  * Example for assertIsArraye()  * @return void  */ 

public function testAssertIsArray() {

$array1 = [];

$array2 = ['2'];

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

$collection = collect([]);

// 以下各 Assertion 皆會通過測試

$this->assertIsArray($array1);

$this->assertIsArray($array2);

$this->assertIsArray($array3);

$this->assertIsArray($collection->toArray());
  // 以下 Assertion 將會不通過測試     

$this->assertIsArray($collection); }

特別注意的是,當你想判定的對象可能是 Collection 時,直接代入 assertIsArray() 將導致判定不通過。

assertIsInt

  • 函數簽名assertIsInt($actual[, $message = ''])
  • 函數說明: 此函數可用來判斷第1個參數是否為 Int 型態。
  • 實作範例
/**  * Example for assertIsInt()  * @return void  */ 

public function testAssertIsInt() {

$int1 = 0;

$int2 = 1;

$float1 = 0.0;

$float2 = 1.0;

$string1 = '0';

$string2 = '1';
  // 以下各 Assertion 皆會通過測試     

$this->assertIsInt($int1); $this->assertIsInt($int2); // 以下 Assertion 將會不通過測試 $this->assertIsInt($float1); $this->assertIsInt($float2); $this->assertIsInt($string1); $this->assertIsInt($string2); }

assertIsFloat

  • 函數簽名assertIsFloat($actual[, $message = ''])
  • 函數說明: 此函數可用來判斷第1個參數是否為 Float 型態。
  • 實作範例
/**  * Example for assertIsFloat()  * @return void  */ 

public function testAssertIsFloat() {

$float1 = 0.0;

$float2 = 1.0;

$float3 = -1.0;
  // 以下各 Assertion 皆會通過測試     

$this->assertIsInt($float1); $this->assertIsInt($float2); $this->assertIsInt($float3); }

以上是幾個通用型 Assertion 函數,有興趣的讀者,可參考範例練習看看。

下一篇來介紹 Cookie、Session、HTTP 相關的 Assertion 函數。

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

參考資料

本系列文章目錄

avatar-img
8會員
240內容數
歡迎來到 WilliamP 的沙龍天地,在這裡將與各位讀者探討各種主題,包刮高中數學題庫、PHP開發經驗、LINE聊天機器人開發經驗、書摘筆記等,歡迎交流!
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
WilliamP的沙龍 的其他內容
今天我們來寫第一個單元測試吧! 不過在那之前,先讓我們了解單元測試的「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 因為該系 統在子公司運作得不錯, 因此集團高層想將它擴展成,全集團都可使用的規模
今天我們來寫第一個單元測試吧! 不過在那之前,先讓我們了解單元測試的「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
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
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
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
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 測試的各環節,包含環境準備、套件安裝、腳本編寫、執行測試與整合。