php - 如何在 PHP 单元测试中传递参数
问题描述
我正在尝试学习如何为我的自定义“框架”创建单元测试,这是一种在用户注册时验证电子邮件地址的方法。
private function verifyEmail()
{
if(empty($this->email) || empty($this->email_repeat)) {
throw new \Exception('please enter email');
}
if($this->email != $this->email_repeat) {
throw new \Exception('emails don\'t match');
}
if(!filter_var($this->email, FILTER_VALIDATE_EMAIL)) {
throw new \Exception('E-mail is invalid');
}
$isTaken = $this->db->getRow("SELECT COUNT(*) as count FROM users WHERE email = ?", [$this->email]);
if($isTaken->count > 0){
throw new \Exception('E-mail is taken');
}
}
这是单元测试
class RegisterTest extends \PHPUnit\Framework\TestCase
{
public function testVerifyEmail() {
// what do i type here?
}
}
那么,我在testVerifyEmail()
方法中输入什么来传递要测试的电子邮件呢?我正在浏览文档,但作为一个新手,信息是压倒性的,我找不到解决方案。
解决方案
您可以使用 PhpUnit DataProvider 为您的测试方法提供参数。
此处的示例将执行 testMethod 4 次(每个 $data 项执行一次)。
<?php
use PHPUnit\Framework\TestCase;
class DataTest extends TestCase
{
/**
* @dataProvider myProvider
*/
public function testMethod($a, $b, $expected)
{
var_dump($a,$b,$expected);
//... your assertions here
}
public function myProvider()
{
$data = [
//each item represents the related method parameter
//the first time $a = 'valueOfA-0', $b='valueOfB-0',$expected='valueOfExpected-0'
//and so on, for each array
['valueOfA-0', 'valueOfB-0', 'valueOfExpected-0'],
['valueOfA-1', 'valueOfB-1', 'valueOfExpected-1'],
['valueOfA-2', 'valueOfB-2', 'valueOfExpected-2'],
['valueOfA-3', 'valueOfB-3', 'valueOfExpected-3'],
];
return $data;
}
}
//values of testMethod parameters each time
//$a = 'valueOfA-0', $b='valueOfB-0', $expected='valueOfExpected-0'
//$a = 'valueOfA-1', $b='valueOfB-1', $expected='valueOfExpected-1'
//$a = 'valueOfA-2', $b='valueOfB-2', $expected='valueOfExpected-2'
//$a = 'valueOfA-3', $b='valueOfB-3', $expected='valueOfExpected-3'
推荐阅读
- javascript - 为什么登录后立即发送认证请求失败?
- .net - 为什么 .NET RESTful API 可以在开发机器上加载 DLL,但不能在其他(AWS EC2)机器上加载?
- javascript - 由 get() jQuery 分配的数组中的 ID 元素作为目标
- python - 我创建的 json 中有一个额外的“[]”。我怎样才能删除它们?
- prometheus - Prometheus - 计算给定指标标签的指标增加
- javascript - 为什么可加载组件抛出 requireAsync .then 不是函数错误
- hadoop - HBase 需要从一个集群中导出数据并导入到另一个集群中,对 row key 稍作修改
- javascript - 如何从回调函数中获取参数的数量?
- c# - 为什么我的扫描仪不在 PosExplorer.GetDevices() 列表中?
- ios - 可重复使用的 MKAnnotationView 显示不同图像的问题