Menulis Test dalam Solidity dengan forge-std
Penjelasan
Ciri khas paling menonjol dari Foundry adalah test ditulis langsung dalam Solidity, bukan JavaScript/TypeScript seperti toolchain lain. Library `forge-std` menyediakan contract dasar `Test` yang di-inherit oleh contract test kita, memberi akses ke fungsi assertion seperti `assertEq`, `assertTrue`, `assertGt`, serta cheatcode lewat objek `vm`. Setiap fungsi test harus diawali kata `test` (misal `testIncrement`), dan Forge otomatis mendeteksi serta menjalankannya. Fungsi `setUp()` dijalankan sebelum tiap test untuk menyiapkan state awal, mirip `beforeEach` di framework JS.
Contoh Konsep
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "forge-std/Test.sol";
import "../src/Counter.sol";
contract CounterTest is Test {
Counter public counter;
// Dijalankan sebelum setiap fungsi test
function setUp() public {
counter = new Counter();
counter.setNumber(0);
}
function testIncrement() public {
counter.increment();
assertEq(counter.number(), 1);
}
function testSetNumber() public {
counter.setNumber(42);
assertEq(counter.number(), 42);
}
}
Praktikum
Lengkapi test untuk contract Counter yang menguji bahwa increment() dipanggil tiga kali menghasilkan number() bernilai 3.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Gunakan `forge test -vvv` saat test gagal untuk melihat trace eksekusi detail, jauh lebih informatif dibanding pesan error singkat.