如何使用PHPUnit测试我的Zend Framework 2 InputFilter?

时间:2013-02-27 19:06:52

标签: phpunit zend-framework2 zend-inputfilter

我创建了一个基本的ZF2 InputFilter。我如何使用PHPUnit测试它而不将其附加到表单?

我找不到任何有关如何完成此操作的示例。希望有人可以提供帮助。

1 个答案:

答案 0 :(得分:6)

我通常有一个数据提供程序来测试我的输入过滤器。

这是一个带有两个非常简单的字段的示例输入过滤器:

use Zend\InputFilter\InputFilter;
use Zend\InputFilter\Input;
use Zend\I18n\Validator\Alnum;

class MyInputFilter extends InputFilter
{
    public function __construct()
    {
        $name = new Input('name');

        $name->setRequired(false)->setAllowEmpty(true);
        $this->add($name);

        $nickname = new Input('nickname');

        $nickname->getValidatorChain()->attach(new Alnum());
        $this->add($nickname);
    }
}

这是一个测试类:

class MyInputFilterTest extends \PHPUnit_Framework_TestCase
{
    public function setUp()
    {
        $this->inputFilter = new MyInputFilter();
    }

    /** @dataProvider validatedDataProvider */
    public function testValidation($data, $valid)
    {
        $this->inputFilter->setData($data);
        $this->assertSame($valid, $this->inputFilter->isValid());
    }

    public function validatedDataProvider()
    {
        return array(
            array(
                array(),
                false
            ),
            array(
                array('name' => '', 'nickname' => 'Ocramius'),
                true
            ),
            array(
                array('name' => 'Test', 'nickname' => 'Ocramius'),
                true
            ),
            array(
                array('name' => 'Test', 'nickname' => 'Hax$or'),
                false
            ),
        );
    }
}

这是一个非常简单的例子,但我基本上在过滤器上抛出不同的数据集并检查与我相关的内容(在这种情况下检查数据是有效还是无效)。

如果您的过滤器对数据应用了转换,您可能还需要检查$inputFilter->getValues()的输出是什么。

如果错误消息与您相关,您还可以检查$inputFilter->getMessages()