Fuzz Testing Otomatis
Penjelasan
Fuzz testing adalah fitur bawaan Foundry yang sangat kuat: cukup dengan menambahkan parameter pada fungsi test, Forge otomatis menjalankan fungsi tersebut ratusan kali dengan nilai acak untuk parameter itu, mencari kombinasi input yang bisa membuat assertion gagal. Ini tidak butuh setup tambahan apa pun — fitur ini aktif secara default begitu fungsi test punya parameter. Jumlah run fuzz bisa dikonfigurasi di foundry.toml (default 256 run). Kalau ada input yang membuat test gagal, Forge otomatis melakukan "shrinking" — mencari nilai counterexample paling sederhana yang tetap menyebabkan kegagalan, memudahkan debugging.
Contoh Konsep
// Fungsi test dengan parameter otomatis di-fuzz oleh Forge
function testFuzz_SetNumber(uint256 x) public {
counter.setNumber(x);
assertEq(counter.number(), x);
}
// Bisa dibatasi rentang nilai dengan vm.assume atau bound()
function testFuzz_Deposit(uint96 amount) public {
vm.assume(amount > 0);
vm.deal(address(this), amount);
vault.deposit{value: amount}();
assertEq(vault.balanceOf(address(this)), amount);
}
Praktikum
Tulis fuzz test untuk fungsi add(uint256 a, uint256 b) pada contract Calculator yang memastikan hasilnya selalu sama dengan a + b (gunakan vm.assume untuk mencegah overflow).
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Gunakan fungsi `bound(x, min, max)` dari forge-std untuk membatasi rentang nilai fuzz dengan efisien, sebagai alternatif `vm.assume` yang bisa boros run kalau kondisinya terlalu ketat.