Study
Foundry

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.

Editor Latihan

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.