0

テストケースを書き始めたばかりで、特定のテストの処理方法がわかりません。私がテストしているクラスは、非常に基本的な言葉で言えば、さまざまなオペコード キャッシュのラッパーです。テストはソフトウェアにバンドルされ、ダウンロードされて多くの異なるホストで使用されるため、これらのクラスのテストをどのように処理するかについて 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());
        }
    }
}

私の最後の質問は、これらのオペコード ラッパーをテストでテストする方法に関するものです。いつでも複数のオペコードを実行することは不可能ですか?

ご指摘ありがとうございます。

4

2 に答える 2

1

私は使用する必要があることに気づきました

protected function setUp() {
    if (!(extension_loaded('apc') && ini_get('apc.enabled'))) {
        $this->markTestSkipped('The APC extension is not available.');
    }
}
于 2013-04-23T17:06:55.843 に答える