Как передать параметры в модульном тестировании PHP - PullRequest
0 голосов
/ 16 мая 2018

Я пытаюсь узнать, как создавать модульные тесты для моей пользовательской «платформы», и вот метод, который проверяет адрес электронной почты, когда пользователь регистрируется.

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(), чтобы передать электронное письмо для проверки?Я просматриваю документацию, но как новичок информация ошеломляет, и я не могу найти решение.

1 Ответ

0 голосов
/ 16 мая 2018

Вы можете использовать PhpUnit DataProvider для предоставления параметров для ваших методов тестирования.

https://phpunit.de/manual/6.5/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.data-providers

В приведенном здесь примере метод testMethod будет выполнен 4 раза (по одному для каждого элемента данных $).

<?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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...