Confucian

Confucian

Blockchain Macro Invoker
twitter
github
telegram

使用 Coverage Gutters 更好地檢查合約 Code Coverage

對於智能合約開發者來說,編寫合約測試是非常重要的一項技能。或許我們不需要像審計那樣嚴謹,但測試一定要覆蓋到所有功能。通常需要 Code Coverage 來查看覆蓋率。

這裡推薦 VS Code 的一款插件 Coverage Gutters 它可以根據你所生成的 Code Coverage Report 文件定位你測試已覆蓋 / 未覆蓋的代碼,並在行前提示出來,使得編寫測試更加高效。

演示#

筆者使用 Foundry 來創建智能合約項目並進行合約測試。

mkdir demo && cd demo
forge init

項目初始化後目錄結構如下:

.
├── README.md
├── foundry.toml
├── lib
   └── forge-std
├── script
   └── Counter.s.sol
├── src
   └── Counter.sol
└── test
    └── Counter.t.sol

6 directories, 5 files

自動生成了 Counter.sol 合約文件與對應的 Counter.t.sol 測試文件

去 VS Code 的插件市場安裝 Coverage Gutters

coverage-gutters

使用 Foundry 生成 Code Coverage Report

forge coverage --report lcov

然後會發現生成了一個 lcov.info 文件

窗口定位到 src/Counter.sol 文件後,點擊底部的 watch

watch

可以發現在測試已經覆蓋到的代碼行前出現綠色標記,同時底部顯示覆蓋率 100%

shot-1

修改 test/Counter.t.sol 添加函數

function decrease() public {
    number--;
}

更新 Code Coverage Report

forge coverage --report lcov

會發現新增的未測試函數行前出現紅色標記,底部覆蓋率變為 67%

shot-2

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。