テストケースを書き始めたばかりで、特定のテストの処理方法がわかりません。私がテストしているクラスは、非常に基本的な言葉で言えば、さまざまなオペコード キャッシュのラッパーです。テストはソフトウェアにバンドルされ、ダウンロードされて多くの異なるホストで使用されるため、これらのクラスのテストをどのように処理するかについて 2 つの理由で困惑しています。
たとえば、このapcラッパーを見てください
class Storage_Container_Apc extends Storage_Container implements Storage_iContainer
{
protected $_id_prefix = '';
protected $_file_prefix = '';
function __construct($id_prefix='', $file_prefix='', $options=array())
{
$this->_id_prefix = $id_prefix;
$this->_file_prefix = $file_prefix;
}
/**
* @see Storage_iContainer::available
*/
public static function available()
{
return extension_loaded('apc') && ini_get('apc.enabled');
}
}
そして、この基本的なテストケース。
class StorageContainerApcTest extends \PHPUnit_Framework_TestCase
{
public function testAvailability()
{
$this->assertTrue(Storage_Container_Apc::available());
}
}
APC のないシステムでは、このテストは明らかに失敗しますが、クラスはモジュールに依存しており、システムで利用できない場合は使用されないため、もちろん失敗ではありません。したがって、この時点では、テストが実際にどうあるべきか、それで OK が返されます。こんな感じでしょうか。
class StorageContainerApcTest extends \PHPUnit_Framework_TestCase
{
public function testAvailability()
{
if(extension_loaded('apc') && ini_get('apc.enabled'))
{
$this->assertTrue(Storage_Container_Apc::available());
}
else
{
$this->assertFalse(Storage_Container_Apc::available());
}
}
}
私の最後の質問は、これらのオペコード ラッパーをテストでテストする方法に関するものです。いつでも複数のオペコードを実行することは不可能ですか?
ご指摘ありがとうございます。