Afin de vous mettre l'eau à la bouche, voici un extrait du code :

...
protected function testRead()
{
$mockGenerator = new ogoMockGenerator();
$mockGenerator->generate('memcache', 'mockMemcache');

$memcache = new mockMemcache();
$memcacheController = new ogoMockController();
$memcache->setMockController($memcacheController);

$phpAdapter = new ogoPhpAdapter();
$phpAdapter->time = uniqid();

$cacheAccessor = new ogoMemcacheCacheAccessor(uniqid(), new ogoIpAddress());
$cacheAccessor
->setMemcache($memcache)
->setPhpAdapter($phpAdapter);

$memcacheController->connect = true;
$memcacheController->close = true;
$memcacheController->get = array('date' => $phpAdapter->time, 'content' => uniqid());

$content = null;

$this->assert
->variable($cacheAccessor->isConnected())->isFalse()
->and
->object($cacheAccessor->read($content))->isIdenticalTo($cacheAccessor)
->and
->variable($cacheAccessor->isConnected())->isTrue()
->and
->variable($content)->isEqualTo($memcacheController->get['content'])
->and
->mock($memcache)->wasCalledMethod('get', array($cacheAccessor->getId()))
;

$memcacheController->get = false;

$content = null;

$exception = null;

try { $cacheAccessor->read($content); } catch (exception $exception) {}

$this->assert
->exception($exception)->isInstanceOf('ogoCacheException')
->hasMessage('Unable to read in memcache cache \'' . $cacheAccessor->getId() . '\' with ip \'' . $cacheAccessor->getIp() . '\' on port \'' . $cacheAccessor->getPort() . '\'');
}
...

Pour ceux qui trouve le code trop verbeux, il faut savoir que les ->and ne sont absolument pas indispensable, mais je trouve le code plus esthétique ainsi.

Evidement, pour pouvoir éxécuter les tests, il faut utiliser une bonne partie de ogo.

Vous pouvez le récupérer à l'aide de la commande :

# svn export http://svn.mageekbox.net/repositories/ogo/trunk/

Il vous suffit ensuite d'éxécuter la commande suivante pour éxécuter les tests :

# cd /path/to/ogo/tests && php ogoTestRunner.php --file classes/cache/accessors/ogoMemcacheCacheAccessorTest.php

Vous pouvez également ajouter l'option +codeCoverages à la commande précédente si vous souhaitez avoir un rapport sur la couverture de code de la classe de test.

Si vous le faite, vous aurez en bonus un rapport au format html dans le répertoire /path/to/ogo/tests/tmp.

Cependant, attention, ogo ne fonctionne que sous unix et à l'aide d'une version récente de PHP disposant d'un certain nombre d'extensions tel que pcntl.