1
我有這樣的功能:模擬了刪除Zend框架的單元測試功能2
<?php
function deleteFromDb(array $where)
{
$sql = new Sql($this->dbAdapter);
$delete = $sql->delete();
$delete->where($where);
$statement = $sql->prepareStatementForSqlObject($delete);
return $statement->execute();
}
如何嘲笑這個功能在Zend框架2單元測試?
如果嘲笑這個功能是沒用的,那麼我如何確保從數據庫中刪除記錄的工作好還是不好? – Dante
在集成測試?這很簡單!執行此函數後,請檢查SELECT返回的行是否具有相同的WHERE條件 - 它們不得返回。 :)你不能完全通過嘲笑來保證這一點。 Mocks的唯一目的是檢查「所有必須執行的函數是否已經執行」。基本上,你可以模擬在這段代碼中使用的「Sql」類,並檢查「刪除」命令是否真的發送到數據庫引擎,但測試複雜,也不能保證任何真正的東西。 – rufanov
也是大多數標準的自動寫入方式針對數據庫引擎的集成測試基於事務。在安排部分測試代碼創建新事務並插入一些(隨機或靜態)數據(確保在測試時所需的數據將存在於數據庫中),在測試中的行爲部分函數中對這些數據做一些動作,聲明部分測試代碼檢查預期的操作是否完成。這就是全部功能 - 檢查它是否「做需要做的事情」,並且實際數據改變了,因爲我們在測試結束時沒有提交測試事務。 :) – rufanov