我今天开始在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'];
}
答案 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整数。如果你停下来想一想,你可能会注意到你不想受任何其他依赖结果的影响。