Singleton.php檔案
<?php
namespace app\singleton\controller;
/**
* Class Singleton 單例模式
*/
class Singleton
{
/**
* @var null private\static:一個類只有一個例項
*/
private static $singleton = null;
/**
* Singleton constructor. private:不允許外部例項化,類必須自行建立這個例項
*/
private function __construct()
{
}
/**
* private:不允許外部通過克隆例項化類
*/
private function __clone()
{
}
/**
* @return Singleton|null 類自行例項
*/
static public function getInstance()
{
// 如果還未例項化,則 new
if (is_null(self::$singleton)) {
self::$singleton = new self();
}
return self::$singleton;
}
}
TestSingleton.php檔案
<?php
namespace app\singleton\controller;
use PHPUnit\Framework\TestCase; // composer 安裝 PHPUnit
/**
* Class TestSingleton 利用 PHPUnit 來測試
*/
class TestSingleton extends TestCase
{
public function test()
{
// 呼叫兩次 getInstance()
$one = Singleton::getInstance();
$two = Singleton::getInstance();
// 斷言這兩個物件是相等的。結果是相等。
$this->assertEquals($one, $two);
}
}
測試結果
PHPUnit 筆記
斷言方法的用法:靜態 vs. 非靜態
1、PHPUnit 的各個斷言是在 PHPUnit\Framework\Assert 中實現的。
PHPUnit\Framework\TestCase 則繼承於 PHPUnit\Framework\Assert。
2、各個斷言方法均宣告為 static,可以以 PHPUnit\Framework\Assert::assertTrue() 的方式呼叫,
也可以以 $this->assertTrue() 或 self::assertTrue() 的方式呼叫。
3、實際上,只要包含了 PHPUnit 中的 src/Framework/Assert/Functions.php 原始碼檔案,
就可用 assertTrue() 這樣的方式來呼叫全域性函式封裝。
4、斷言方法是宣告為 static 的,這使其可以(重)用於測試物件的作用域之外。
全域性函式封裝讓開發者用 assertTrue() 代替 $this->assertTrue() 或者 self::assertTrue() 。
本作品採用《CC 協議》,轉載必須註明作者和本文連結