假設有一個方法public function updateTimestamp($sessionId, $data){ return $this->memcached->touch($sessionId, time() + $this->ttl);}我想測試一下。感染+將in更改time() + $this->ttl為-,我的所有測試仍在通過。所以我想做一個測試來模擬 Memcached 的觸摸,并將有條件地返回true/false基于傳遞給它的第二個參數。所以做類似的事情: // $ttl is set; $memcachedMock ->touch( 'sessionId', $certainValuePassedToTouch ) ->willReturn( $certainValuePassedToTouch >= time() + $ttl ? true : false ) ;現在有兩個問題:我不知道如何為傳遞給被模擬方法的任意整數參數設置這樣的條件基于 time() 似乎很不可靠,那么如果 time() 在方法本身中使用,我如何可靠地測試它?
2 回答

慕田峪4524236
TA貢獻1875條經驗 獲得超5個贊
您可以模擬time()要返回的函數0,并且該方法的返回值touch()將完全取決于該$ttl值。對于第一個,其他答案中有建議,第二個可以存檔returnCallback()。
$memcachedMock
->method('touch')
->will($this->returnCallback(function ($key, $val) {
return $val > 0;
}));

達令說
TA貢獻1821條經驗 獲得超6個贊
也許你可以看看這個工具:
基于 PHP 的命名空間回退策略 ( https://www.php.net/manual/en/language.namespaces.fallback.php ),它允許模擬 php 原生函數,如 time()、date() 等。
- 2 回答
- 0 關注
- 144 瀏覽
添加回答
舉報
0/150
提交
取消