我刚开始编写测试用例,我不知道如何处理某些测试。我正在测试的类是非常基本的术语,用于各种操作码缓存的包装器。测试将被捆绑到软件中,这些软件将被下载并在许多不同的主机上使用,因此我很困惑如何处理这些类的测试有两个原因。
以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());
}
}
}
我的上一个问题涉及如何使用测试来测试这些操作码包装器。因为在任何给定时间都不可能运行多个操作码?
非常感谢任何指示。
答案 0 :(得分:1)
我意识到我应该使用
protected function setUp() {
if (!(extension_loaded('apc') && ini_get('apc.enabled'))) {
$this->markTestSkipped('The APC extension is not available.');
}
}
答案 1 :(得分:0)
您也可以使用
@codeCoverageIgnore
例如:
/**
* @see Storage_iContainer::available
* @codeCoverageIgnore
*/
public static function available()
{
return extension_loaded('apc') && ini_get('apc.enabled');
}