php - 单元测试101如何正确测试模型?

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

我拥有长期的编程经验,并决定在我的下一个项目中我将使用单元测试。我正在使用 php 与 CodeIgniter 和 oracle 作为 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 没问题,或者我应该如何测试它? }`

最佳答案

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

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

备用参数:您可能觉得您可以完全控制发送到 CRUD 函数的数据,但是它们将如何处理与您期望的情况不同的情况?你说当查询错误时我会得到一个 php 错误 但这是你真正想要发生的吗?使用异常处理捕获这些错误并按照您自己的方式处理它们,而不是突然立即停止脚本执行,不是更好吗? 或者更糟糕的是,某些东西很容易受到 SQL 注入(inject)的攻击,而您却因为从未创建过测试用例而不知道?

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

关于php - 单元测试101如何正确测试模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9734644/

相关文章:

mysql - 将数据透视表连接到另一个表(HABTM 连接 HABTM 和模型关联)

javascript - Ajax 和 MySql 插入、检查和检索

javascript - 无法加载带有数据的选项卡式页面

php - 为什么 mysqli 插入不起作用?

java - 基本 SpringMvC Controller 不工作

java - 在assertEquals之后不要停止测试

java - 使用 Thread.sleep 进行测试

单元测试期间的 Python 日志捕获

php - 正则表达式和匹配

javascript - 通过脚本/小部件分析数据