我正在尝试学习如何为自定义“框架”创建单元测试,这是一种在用户注册时验证电子邮件地址的方法。
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()
方法中输入什么来传递要测试的电子邮件?我正在阅读文档,但作为一个新手,信息是压倒性的,我找不到解决方案。
答案 0 :(得分:1)
您可以使用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'