1
我有一個利用當前時間的函數(now
)。合同作爲一個整體是一個衆籌令牌,代幣的花費取決於代幣購買的日期和時間。單元測試日期時間值
測試智能合同時,一個人如何模擬不同的時間?例如,關於下面的代碼,我想進行單元測試,以確定設置價格的代碼是否正確,但我無法更改now
的值。
難道是一個很好的解決方案簡單地替代now
關鍵字的另一個臨時測試變量,說now_sim
然後模擬過程中手動更改now_sim
?
if (now < (startTime + 1 days)) {
currentPrice = safeDiv(safeMul(price, 80), 100); // 20 % discount (x * 80/100)
}
else if (now < (startTime + 2 days)) {
currentPrice = safeDiv(safeMul(price, 90), 100); // 10 % discount (x * 90/100)
}
else if (now < (startTime + 12 days)) {
// 1 % reduction in the discounted rate from day 2 until day 12 (sliding scale per second)
// 8640000 is 60 x 60 x 24 x 100 (100 for 1%) (60 x 60 x 24 for seconds per day)
currentPrice = price - safeDiv(safeMul((startTime + 12 days) - now), price), 8640000);
}
else {
currentPrice = price;
}