【问题标题】:unit testing 101 how to correctly test models?单元测试 101 如何正确测试模型?
【发布时间】:2012-03-16 17:43:49
【问题描述】:

我有长期的编程经验,并决定在我的下一个项目中使用单元测试。我正在使用带有 CodeIgniter 和 oracle 的 php 作为 rdbms 创建一个应用程序。 我所有的模型基本上只有与数据库一起使用的方法:CRUD 方法,没什么特别的。好的,所以问题是我应该如何测试这些?它们值得测试吗?因为当查询错误时,我会得到一个 php 错误,基本上我所有的测试都会通过,因为我的查询是正确的。 在测试模型时我应该关注什么以及我应该期待什么?

例如: 简单的方法:

public function register($username, $password, $email)
{
    $hash = $this->_generate_hash();

    return $this->add(array(
        'username'      => $username,
        'password'      => hash('sha256', $this->config->item('salt') . $password . $hash),
        'email'         => $email,
        'hash'          => $hash
    ));

如果查询正常,则此插入将始终有效,并且如果我将测试参数添加到函数中,它将始终通过,但是由于 SQL 正常,因此测试通过了,或者我应该如何测试呢? }`

【问题讨论】:

    标签: php model-view-controller unit-testing phpunit


    【解决方案1】:

    在测试模型时,我尝试考虑两件事:代码覆盖率和备用参数。

    代码覆盖率:尝试实现高水平的代码覆盖率很重要。这使您可以准确地弄清楚在不同的执行情况下会发生什么以及如何处理它们。很多时候,我发现一些难以测试的领域,经过一些审查后,我意识到它的编写方式并不是最佳的。对我的代码进行快速重构通常会使所有内容看起来更干净、工作得更好并且更易于测试。

    备用参数:您可能觉得您可以完全控制发送到您的 CRUD 函数的数据,但它们将如何处理不符合您预期的情况?你说when the query is wrong I will get a php error 但那是你真正想要发生的事情吗?使用异常处理来捕获这些错误并按照您自己的方式处理它们而不是突然和立即停止脚本执行不是更好吗? 或者更糟糕的是,有些东西很容易受到 SQL 注入的影响,而您却不知道,因为您从未创建过测试用例?

    这些是我个人在对模型进行单元测试时喜欢考虑的几件事。

    【讨论】:

    • 问题是我使用 CodeIgniter 作为我的 php 框架并使用 CI 的 Active Record,因此 sql 注入由该组件处理
    • 这只是让您思考测试用例和可能性的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 2018-10-19
    • 2019-06-21
    • 2015-06-24
    • 2017-12-19
    • 2010-12-26
    相关资源
    最近更新 更多