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

Jee*_*s24 2 phpunit zend-framework2 zend-inputfilter

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

我找不到任何关于如何做的样本.希望有人可以帮忙.

Ocr*_*ius 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个测试类:

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
            ),
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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