前一天我們實作了第一個測試,我們學到了第一個 Assert 函數 assertEquals
。 今天讓我們來了解其他常用的 Assert 函數吧!
assertEmpty(mixed $actual[, string $message = ''])
$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(mixed $expected, mixed $actual[, string $message = ''])
$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(mixed $expected, mixed $actual[, string $message = ''])
$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(bool $condition[, string $message = ''])
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(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($actual[, $message = ''])
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($actual[, $message = ''])
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($actual[, $message = ''])
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 函數。
如果您喜歡這篇文章,歡迎加入追蹤以接收新文章通知 😄