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
留言分享你的想法!
avatar-img
WilliamP的沙龍
13會員
565內容數
歡迎來到 WilliamP 的沙龍天地,在這裡將與各位讀者探討各種主題,包刮高中數學題庫、PHP開發經驗、LINE聊天機器人開發經驗、書摘筆記等,歡迎交流!
WilliamP的沙龍的其他內容
2023/12/18
在前一篇文章中,我們探討了多重資料庫連線情境下,Model 及 Database Assertion 的應對方式,不過實際上筆者認為比較有難度的,其實是 Migration 應對方式。 今天就讓我們來探討這部分吧! Migration 應對方式 對於多重資料庫連線這種情境,筆者實務上做過的對應
2023/12/18
在前一篇文章中,我們探討了多重資料庫連線情境下,Model 及 Database Assertion 的應對方式,不過實際上筆者認為比較有難度的,其實是 Migration 應對方式。 今天就讓我們來探討這部分吧! Migration 應對方式 對於多重資料庫連線這種情境,筆者實務上做過的對應
2023/12/18
今天讓我們探討「缺乏 Migration Files 與 Factory Files」的 Legacy 情境吧! 很多時候我們會遇到沒有 Migration Files 或 Factory Files 的 Legacy Codebase,原因大概有以下幾種: 該程式庫原本不是以 Laravel
2023/12/18
今天讓我們探討「缺乏 Migration Files 與 Factory Files」的 Legacy 情境吧! 很多時候我們會遇到沒有 Migration Files 或 Factory Files 的 Legacy Codebase,原因大概有以下幾種: 該程式庫原本不是以 Laravel
2023/12/18
在實務情境上,常會有在單一專案程式庫中,存取多個不同資料庫的使用情境,在這種情況下,我們通常會設置多個資料庫連線(Database Connection)設定。 在平常開發使用設很方便,但要做測試時就會發現一些問題: 在測試程式碼或 Seeder 中調用 factory() 時,都是在預設連線資
2023/12/18
在實務情境上,常會有在單一專案程式庫中,存取多個不同資料庫的使用情境,在這種情況下,我們通常會設置多個資料庫連線(Database Connection)設定。 在平常開發使用設很方便,但要做測試時就會發現一些問題: 在測試程式碼或 Seeder 中調用 factory() 時,都是在預設連線資
看更多
你可能也想看
Thumbnail
覺得黏在額頭上的"條碼瀏海"很阿雜嗎?日本熱銷的「KOIZUMI迷你瀏海梳」,不僅小巧便攜,更能快速加熱造型,無論是齊瀏海、空氣瀏海還是韓系碎蓋髮,都能輕鬆打理!瀏海順了,一整天心情就好了!
Thumbnail
覺得黏在額頭上的"條碼瀏海"很阿雜嗎?日本熱銷的「KOIZUMI迷你瀏海梳」,不僅小巧便攜,更能快速加熱造型,無論是齊瀏海、空氣瀏海還是韓系碎蓋髮,都能輕鬆打理!瀏海順了,一整天心情就好了!
Thumbnail
走完朝聖之路和TMB後,我發現真正能撐住長時間健行的,不只是腳力,而是那些讓生活更舒服的小物。這篇整理了我在TMB實測後覺得超好用的三樣登山神器——防水襪、肥皂袋、速乾毛巾,每一樣都讓旅程更輕鬆!
Thumbnail
走完朝聖之路和TMB後,我發現真正能撐住長時間健行的,不只是腳力,而是那些讓生活更舒服的小物。這篇整理了我在TMB實測後覺得超好用的三樣登山神器——防水襪、肥皂袋、速乾毛巾,每一樣都讓旅程更輕鬆!
Thumbnail
在本章節中,我們探討了 PHP 中如何引用和管理套件。學習了如何使用 Composer 來安裝第三方套件,以及如何引用自定義模組。此外,我們還介紹了如何創建和使用自定義套件,並列舉了一些在 PHP 社群中常見且廣泛使用的套件和庫。通過掌握這些知識,開發者可以更有效地管理和利用各種資源。
Thumbnail
在本章節中,我們探討了 PHP 中如何引用和管理套件。學習了如何使用 Composer 來安裝第三方套件,以及如何引用自定義模組。此外,我們還介紹了如何創建和使用自定義套件,並列舉了一些在 PHP 社群中常見且廣泛使用的套件和庫。通過掌握這些知識,開發者可以更有效地管理和利用各種資源。
Thumbnail
在這一章中,我們探討了 PHP 中的函數,包括函數的基本結構、不同的函數定義方式(如函數聲明、函數表達式、箭頭函數和匿名函數)以及如何呼叫函數。我們還討論了函數的參數處理方式,包括單個參數、多個參數、預設參數值和剩餘參數。此外,我們還介紹了函數的返回值,包括返回單個值、返回物件和返回函數的情況。
Thumbnail
在這一章中,我們探討了 PHP 中的函數,包括函數的基本結構、不同的函數定義方式(如函數聲明、函數表達式、箭頭函數和匿名函數)以及如何呼叫函數。我們還討論了函數的參數處理方式,包括單個參數、多個參數、預設參數值和剩餘參數。此外,我們還介紹了函數的返回值,包括返回單個值、返回物件和返回函數的情況。
Thumbnail
在這一章中,我們介紹了PHP中的流程控制語句,包括if、else if、else、三元運算子、switch語句、for迴圈、foreach迴圈、while迴圈、do-while迴圈、循環嵌套以及控制迴圈的語句如break、continue、goto和return。
Thumbnail
在這一章中,我們介紹了PHP中的流程控制語句,包括if、else if、else、三元運算子、switch語句、for迴圈、foreach迴圈、while迴圈、do-while迴圈、循環嵌套以及控制迴圈的語句如break、continue、goto和return。
Thumbnail
本章節旨在介紹如何在不同操作系統上安裝和配置PHP環境,並使用命令行工具進行基礎操作。此外,還介紹了使用Visual Studio Code進行PHP開發的步驟,包括安裝擴展和設置調試環境。
Thumbnail
本章節旨在介紹如何在不同操作系統上安裝和配置PHP環境,並使用命令行工具進行基礎操作。此外,還介紹了使用Visual Studio Code進行PHP開發的步驟,包括安裝擴展和設置調試環境。
Thumbnail
在本節中,我們介紹了PHP的基本語法,包括如何在HTML中嵌入PHP代碼,PHP腳本的執行順序,以及多種註解方式。我們還學習了如何定義和使用變數,包括單個變數和多個變數的賦值方法。這些基礎知識將幫助你開始使用PHP進行Web開發。
Thumbnail
在本節中,我們介紹了PHP的基本語法,包括如何在HTML中嵌入PHP代碼,PHP腳本的執行順序,以及多種註解方式。我們還學習了如何定義和使用變數,包括單個變數和多個變數的賦值方法。這些基礎知識將幫助你開始使用PHP進行Web開發。
Thumbnail
這個章節介紹了PHP的基本特性和應用領域,並且列舉了使用PHP的知名公司和網站。了解PHP的簡單易學、跨平台、嵌入HTML等特性,以及PHP在動態網站、電子商務、內容管理系統、社交媒體平台、數據庫管理和API開發中的應用。
Thumbnail
這個章節介紹了PHP的基本特性和應用領域,並且列舉了使用PHP的知名公司和網站。了解PHP的簡單易學、跨平台、嵌入HTML等特性,以及PHP在動態網站、電子商務、內容管理系統、社交媒體平台、數據庫管理和API開發中的應用。
Thumbnail
當我們架好站、WebService測試完,接著就是測試區域網路連線啦~
Thumbnail
當我們架好站、WebService測試完,接著就是測試區域網路連線啦~
Thumbnail
if 條件式
Thumbnail
if 條件式
Thumbnail
從基本的OOP概念、PHP基礎回顧,到類別與物件的深入探討、進階概念如繼承、介面與抽象類別,再到實戰應用與設計模式入門,最後以課程總結與未來學習資源提供作結。此課程架構確保學生能夠從基礎到進階,全面掌握PHP物件導向程式設計的核心概念與技術。
Thumbnail
從基本的OOP概念、PHP基礎回顧,到類別與物件的深入探討、進階概念如繼承、介面與抽象類別,再到實戰應用與設計模式入門,最後以課程總結與未來學習資源提供作結。此課程架構確保學生能夠從基礎到進階,全面掌握PHP物件導向程式設計的核心概念與技術。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News