Solidity

如何對合約私有和內部功能進行單元測試?

  • January 7, 2022

我們如何使用 Truffle 框架對合約私有函式進行單元測試?

由於 Solidity 沒有包訪問或反射語言功能,因此標準的私有測試方法不起作用。

創建一個繼承自我們正在測試的合約的測試合約似乎是唯一可行的方法。然而,這些測試將在區塊鏈上執行。

有沒有辦法從 Javascript 對私有函式進行單元測試?

如果它們是internal函式,你可以繼承它們並測試它們,如果它們是private函式,我相信對它們進行單元測試的唯一方法是製作它們public/ internal,測試它們,然後在測試通過後將它們改回私有。

另一種解決方法是重構您的程式碼,使私有函式成為library您導入到contract. 這樣,功能public在實際中,library但不暴露在實際中contract

您可以將契約繼承到具有僅呼叫私有/內部方法的公共方法的 TestContract。這樣,您可以在不修改其可見性的情況下測試原始合約中方法的正確性。

引用自:https://ethereum.stackexchange.com/questions/38158