PHPUnit 测试实例

标签 php email tdd phpunit wrapper

我创建了一个 mail包装类。我知道有很多库可以发送电子邮件,但我想学习 TDD……所以,我创建了一些测试并且我有一些代码。现在我可以在构造函数上设置电子邮件地址并对其进行验证......如果电子邮件地址错误,则会引发异常。电子邮件地址是唯一一个必填字段...我没有设置和获取,因为用户将在构造函数上设置所有电子邮件数据。

现在,我要编写发送测试。我不知道如何开始。如果我不想拥有 setter 和 getter,我如何测试这些值是否存在(主题、邮件正文、标题)?如何测试是否可以发送电子邮件?

现实世界的 TDD 示例对我来说很难。我已经尝试了解它,我已经阅读了很多东西,但我无法测试真正的代码。

谢谢。

最佳答案

由于您链接到邮件功能,对 mail 的调用可能已硬编码到您的代码中。所以看看

安装 testhelper extension并模拟对 mail 的调用。然后让模拟验证它在调用包装器的发送方法时使用正确的值调用,例如在某处定义自定义邮件功能:

function mail_mock()
{
    $allThatWasPassedToTheFunction = func_get_args();
    return $allThatWasPassedToTheFunction;
}

然后在你的 send() 测试中,做类似的事情

public function testSendReceivesExpectedValues()
{
    // replace hardcoded call to mail() with mock function
    rename_function('mail', 'mail_orig');
    rename_function('mail_mock', 'mail');

    // use the wrapper
    $testClass = new MailWrapper('foo@example.com');
    $results = $testClass->send();

    // assert the result
    $this->assertSame('foo@example.com', $results[0]);
    $this->assertSame('Default Title', $results[1]);
    $this->assertSame('Default Message', $results[2]);
}

请注意,上面假设您的发送函数将返回 mail() 调用的结果。

通常,您总是会尝试用 Mock or a Stub 替换外部子系统,例如 sendmail 或数据库或文件系统。 ,因此您可以集中精力测试自己的代码,与外部子系统隔离。您不需要测试 mail 是否真的有效。

另见 http://www.phpunit.de/manual/3.6/en/test-doubles.html

关于PHPUnit 测试实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6346690/

相关文章:

android - 使用 Intent 在android中打开文件

javascript - 如何用 Jasmine 模拟 JQuery?

php - SQL查询失败但事务回滚不起作用

php - 无法使用 PHP $_POST[] 变量检索 jQuery 序列化表单数据

PHPExcel Multiple Dropdown list that dependent

c# - Autofixture - 创建带余数的 float 、 double 或小数

javascript - 如何测试我的 selenium/jquery/AJAX 项目?

php - 查询生成器 - 获取另一个查询的行数

c# - 将文件附加到电子邮件而不创建文件

c# - 如何防止 Lotus Notes 用户转发或复制通过 System.Net.Mail 发送的消息?