PHPUnit - PHP致命错误:在null上调用成员函数GetOne()

时间:2016-02-24 11:54:42

标签: php unit-testing phpunit

我今天开始在PhpStorm上使用PHPUnit Tests。 我可以测试几乎所有函数,除了需要数据库连接的函数。

功能:

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app="app" ng-controller="MyCtrl">
    <li ng-repeat="item in items">
     <span ng-class="{'timeline': $even, 'timeline-inverted': $odd}">
       {{item}}
      </span>
    </li>
  </div>

在我的测试用例中,我收到了错误:

  

PHP致命错误:在null

上调用成员函数GetOne()

我定义了:

public function getProductID()
{
     $this->product_id = $this->db->GetOne("select product_id from table1 where id = {$this->id}");
     return $this->product_id['product_id'];
}

1 个答案:

答案 0 :(得分:4)

你应该在测试中模拟/存根你的连接,比如

$stub = $this
    ->getMockBuilder('YourDBClass') // change that value with your REAL db class
    ->getMock();

// Configure the stub.
$stub
    ->method('GetOne')
    ->willReturn(); // insert here what you expect to obtain from that call

你测试的方式与其他依赖关系是隔离的。

如果您想进行不同类型的测试(例如,使用REAL DB数据),则不应进行单元测试,functional testing or integration testing

说明

这里你要测试的是getProductID()(一种方法)应该基本上返回一个整数。期。这是(或应该)您测试的目的。所以你只想检查是否返回一个整数,而不是返回THAT整数。如果你停下来想一想,你可能会注意到你不想受任何其他依赖结果的影响。