PHPUnit Skeleton 类
如果使用PHP创建类,则应尽可能对它们进行单元测试。为代码设置单元测试类可能很耗时,并且涉及大量复制和粘贴。值得庆幸的是,PHPUnit附带了一些帮助程序功能,这些功能允许自动创建单元测试类,从而节省了一些复制和粘贴。
作为本文的示例,我将使用以下Spider类,该类是我目前正在使用PHP创建简单站点Spider的一些代码的一部分。
urlLimit = $limit;
return $this;
}
/**
* Add an item to the queue.
*
* @param string $url The URL
*/
public function enqueue($url) {
$this->queue[$url] = $url;
}
/**
* Tests to see if a given string is a URL.
*
* @param string $url The string to test.
*
* @return boolean True if string is URL, otherwise false.
*/
public function validUrl($url) {
return preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url);
}
}使用--skeleton-test标志调用phpunit将使我们能够为我们规定的任何类创建单元测试类。要使用上面的代码执行此操作,并假设该类位于文件Spider.php中,那么我们可以运行以下命令。
phpunit--skeleton-testSpiderSpider.php
最后一个参数(Spider.php)是可选的,但仅在文件名与类名相同(末尾带有.php扩展名)时才有效。
这将创建骨架单元测试类,以准备要实施的实际单元测试。原始类中定义的每个方法在单元测试类中都有其自己的测试方法。每个测试都包含对的调用markTestIncomplete(),该调用迫使PHPUnit跳过测试并将其标记为未完成。通过命令行运行类时,这会在输出中产生“I”。此类还包括在每个测试之前和之后运行的setUp()和tearDown()方法。
这是从上述命令生成的示例单元测试类。
object = new Spider;
}
/**
* Tears down the fixture, for example, closes a network connection.
* This method is called after a test is executed.
*/
protected function tearDown()
{
}
/**
* @todo Implement testExcludedFileExtensions().
*/
public function testExcludedFileExtensions()
{
// 实施此测试时,请删除以下几行。
$this->markTestIncomplete(
'This test has not been implemented yet.'
);
}
/**
* @todo Implement testSetUrlLimit().
*/
public function testSetUrlLimit()
{
// 实施此测试时,请删除以下几行。
$this->markTestIncomplete(
'This test has not been implemented yet.'
);
}
/**
* @todo Implement testEnqueue().
*/
public function testEnqueue()
{
// 实施此测试时,请删除以下几行。
$this->markTestIncomplete(
'This test has not been implemented yet.'
);
}
/**
* @todo Implement testValidUrl().
*/
public function testValidUrl()
{
// 实施此测试时,请删除以下几行。
$this->markTestIncomplete(
'This test has not been implemented yet.'
);
}
}我应该在这里指出,生成的单元测试类足以使您开始测试该类,但是不应将其作为完整的测试框架来依赖。测试方法和测试功能之间存在细微的界限,这可能是其所有帖子的基础。最终的单元测试类应该看起来与此处生成的文件完全不同,但这是一种快速启动和运行的好方法。
也可以使用--skeleton-class标志从现有的单元测试类中生成类。这与上述方法完全相反,如果您首先创建单元测试类,则将使用此方法。为了从上面创建的现有SpiderTest单元测试类创建一个简单的类,我们将执行以下操作。
和以前一样,此处的final参数可以省略,但前提是文件名与类名匹配。这将创建一个简单的骨架类,可用作代码模板。以下是上述命令输出的典型示例。
这里要注意的重要一件事是,如果您不小心的话,这可以删除您现有的类文件。上面生成的文件始终具有与此相同的结构,因此此操作将覆盖您已经拥有的任何代码。