Я хочу создать юнит-тест для отправки почты (phpunit, mockery) - PullRequest
0 голосов
/ 08 ноября 2018

Использование

  • PHPUnit (6.5.8)
  • издевательство (1.1.0)
  • Phalcon (7,2)
  • Phalcon / инкубатор (3.4.0)

Чего я хочу достичь

Я хочу создать модульный тест для отправки почты. Кажется, это простой тест, но я не смог этого сделать.

Теперь, когда я запускаю тест, возвращается false. Но я ожидаю, что правда вернулась.

Я ошибаюсь?

Метод, который я хочу проверить

Это методы для проверки

namespace \App\Controllers;

class TestController extends \Base\Controller

private function _sendConfirmationMail()
    {
        $to = "to";
        $from = 'test@example.com';
        $subjectText = 'subjectText';
        $subject = "subject";
        $headers = "Content-Type: text/html; charset=UTF-8" . "\r\n"
                 . "From: Company <{$from}>" . "\r\n"
                 . "Bcc: test@example.com";

        $body = 'body ... ... ... ';

        if (mb_send_mail($to, $subjectText, $body, $headers, "-f {$from}")) {
        return true;
        }
        return false;
   }

Юнит тест

Это юнит тест (Я ожидал, что истина вернулась, но ложь вернулась)

public function testsMailTransmissionSucceeds()
    {
        $mockTestController = $this->getMockBuilder(\App\Controllers\TestController::class)
        ->setMethods(array("_sendConfirmationMail"))
        ->getMock();


    // use reflection class because of private method
    $reflection = new \ReflectionClass($mockTestController);
    $method = $reflection->getMethod('_sendConfirmationMail');
    $method->setAccessible(true);
    $this->assertTrue($method->invokeArgs($mockTestController, "_sendConfirmationMail", array($clientData, $siteData, $params));
}
...