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

米琪卡哇伊
TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊
對(duì)于任意參數(shù),您可以查看Faker庫。它會(huì)為您生成任意虛假數(shù)據(jù)。

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

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