Singleton Pattern mit PHPUnit testen
Geschrieben von Dejan Spasic • Tuesday, 24. February 2009 • Kommentar (1)Das Singleton (auch Einzelstück genannt) ist ein in der Softwareentwicklung eingesetztes Entwurfsmuster und gehört zur Kategorie der Erzeugungsmuster (engl. Creational Patterns). Es verhindert, dass von einer Klasse mehr als ein Objekt erzeugt werden kann. Dieses Einzelstück ist darüber hinaus üblicherweise global verfügbar. Das Muster ist eines der von der so genannten Viererbande (GoF) publizierten Muster.Quelle: Wikipedia
Die Klasse
class Singleton
{
// Anlegen der Instanz
private static $self = null;
//Konstruktor private, damit die Klasse nur aus sich selbst heraus instanziiert werden kann.
private function __construct()
{
}
// Diese statische Methode gibt IMMER die selbe Instanz zurueck.
public static function getInstance()
{
if (null === self::$self) {
self::$self = new self;
}
return self::$self;
}
// Klonen per 'clone()' von außen verbieten.
private function __clone()
{
}
}
Der Unittest
/**
* TestCase for Singelton class
*
* @category UnitTests
* @package DDown
* @subpackage DesignPatterns
*/
class SingletonTest extends PHPUnit_Framework_TestCase
{
/**
* Testing the singelton pattern
* @return void
* @covers Singleton::getInstance
* @covers Singleton::__constructor
* @covers Singleton::__clone
* @link http://en.wikipedia.org/wiki/Singleton_pattern Singleton pattern
*/
public function testSingleton()
{
self::assertTrue(
Singleton::getInstance() === Singleton::getInstance(),
'Singelton seems not working!'
);
$clazz = new ReflectionClass('Singleton');
self::assertFalse(
$clazz->isInstantiable(),
'Singleton instantiable. Please declare the construct as '
. 'private or protected'
);
try {
$cloneMethod = $clazz->getMethod('__clone');
} catch (ReflectionException $e) {
self::fail($e->getMessage());
}
self::assertTrue($cloneMethod->isPrivate(), 'Singleton is clonable');
}
}
Weiterführenden Lieteratur
Tags für diesen Artikel: design patterns, phpunit

