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

Php 单元测试101如何正确测试模型?,php,model-view-controller,unit-testing,phpunit,Php,Model View Controller,Unit Testing,Phpunit,我有很长的编程经验,并决定在我的下一个项目中使用单元测试。我正在使用php和CodeIgniter以及oracle作为rdbms创建一个应用程序。 我所有的模型基本上只有处理数据库的方法:CRUD方法,没有什么特别的。好的,问题是我应该如何测试这些?它们值得测试吗?因为当查询出错时,我会得到一个php错误,基本上我所有的测试都会通过,因为我的查询是正确的。 在测试模型时,我应该关注什么?我应该期望什么 e、 g: 简单方法: public function register($username,

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

e、 g: 简单方法:

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注入的攻击,而您却不知道,因为您从未创建过测试用例


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

问题是我使用CodeIgniter作为我的php框架,并使用CI的活动记录,因此sql注入由该组件处理,这只是让您思考测试用例和可能性的一件事。