0

我刚刚开始编写测试用例,不确定如何处理某些测试。我正在测试的类,用非常基本的术语来说,是各种操作码缓存的包装器。测试将被捆绑到软件中,这些软件将被下载并在许多不同的主机上使用,因此我对如何处理这些类的测试感到困惑,原因有两个。

以这个 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 回答
0

你也可以使用

@codeCoverageIgnore

例如:

/**
 * @see Storage_iContainer::available
 * @codeCoverageIgnore
 */
public static function available()
{ 
    return extension_loaded('apc') && ini_get('apc.enabled');
}

请参阅代码覆盖率分析

于 2014-09-10T22:59:38.317 回答