在PHPUnit中测试表单输入

时间:2020-03-06 14:42:43  来源:igfitidea点击:

在PHPUnit中测试$ _GET和$ _POST输入的最佳方法是什么?

我有一个可以清除输入内容的类,并希望在处理虚假数据时检查其是否正常工作。有没有一种简单的方法可以在PHPUnit中设置表单变量,还是应该将验证传递给辅助变量/类,以便对它们进行间接测试?

解决方案

看看依赖注入的想法。简而言之,我们应该向代码提供所需的内容,而不是获取所需的数据……这是一个示例:

没有依赖注入的示例

function sanitize1() {
  foreach($_POST as $k => $v) {
    // code to sanitize $v
  }
}

sanitize1();

依赖注入示例

function sanitize2(array &$formData) {
  foreach($formData as $k => $v) {
    // code to sanitize $v
  }
}

sanitize2($_POST);

看到不同?在PHPUnit测试中,我们可以通过我们选择的关联数组sanitize2()。我们已经注入了依赖项。而sanitize1()与$ _POST结合使用。无论如何,$ _POST和$ _GET都是assoc数组,因此在生产代码中我们可以将$ _GET或者$ _POST传递给函数,但是在单元测试中,我们将对某些预期数据进行硬编码。

单元测试示例:

function testSanitize() {
  $fakeFormData = array ('bio' => 'hi i\'m arin', 'location' => 'San Francisco');
  sanitize($fakeFormData);
  // assert something
}