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参数可以省略,但前提是文件名与类名匹配。这将创建一个简单的骨架类,可用作代码模板。以下是上述命令输出的典型示例。
这里要注意的重要一件事是,如果您不小心的话,这可以删除您现有的类文件。上面生成的文件始终具有与此相同的结构,因此此操作将覆盖您已经拥有的任何代码。