使用PhpUnit的最佳实践

时间:2011-01-07 17:51:57

标签: phpunit

我是PhpUnit的新手,我对编写测试的最佳实践有些怀疑。

我的第一个测试如下:

<?php

require_once '../Scrap.php';

class ScrapTest extends PHPUnit_Framework_TestCase
{

    protected $scrap;

    // Setup function to instantiate de object to $this->scrap
    protected function setUp()
    {
        $this->scrap = new Scrap;
    }

    /**
    * @covers Scrap::getPhone
    *
    */
    public function testGetPhone() {

        // Variables
        $array_static1 = Array(0 => 218559372, 1 => 927555929, 2 => 213456789, 3 => 912345678);
        $phone_list1   = '</div>A Front para<br /><br /><br /><br /><br /><br />-Apoio;<br />-Criação;<br />-Campanhas;<br />-Promoções<br /><br /><br />CONDIÇÕES:<br /><br />Local de Trabalho: Es<br />Folgas: Mistas<br /><br /><br /><br />ordem 500€<br /><br /><br /><br />Mínimos:<br /><br />- Conhecimentos;<br />- Ensino ;<br />-INGLÊS.<br /><br /><br /><br />Candidaturas: <br />email@ffff.es<br />218559372 | 927 555 929 | <br />RH<br />Rua C. Sal. 40<br />1000-000 Lisboa<br /><br /><br />+351 21 3456789 | (351) 912345678';

        $this->assertEquals($array_static1, $this->scrap->getPhone($phone_list1, '351', '9'));
    }
}
?>

我可以比这更好吗?这是正确的做法吗?

如果你能给我一些线索,我将不胜感激。

最诚挚的问候,

2 个答案:

答案 0 :(得分:0)

在这种情况下,我会使用phpUnit的dataProvider功能。这将允许您使用简单,干净的测试用例和具有不同测试数据集的其他方法。

示例:

public function getTextsAndPhones() {
    return array(
        array(
           '</div>A Front para<br /><br />(...)<br />+351 21 3456789 | (351) 912345678',
            array(0 => 218559372, 1 => 927555929, 2 => 213456789, 3 => 912345678),
        ),
    );
}

/**
 * @dataProvider getTextsAndPhones
 */
public function testGetPhone( $text, $phones ) {
    $this->assertEquals($phones, $this->scrap->getPhone($text, '351', '9'));
}

当然,您也可以在数据提供者中包含'351'和'9'参数。

答案 1 :(得分:0)

我会使用file_get_contents从文件加载fixture(将要注入的HTML)。有一个很长的HTML字符串有点乱。

此外,使用清晰的变量名称很方便。在您的情况下,$ array_static1可以重命名为$ expected_phone_numbers。