mcpField
S
solidity-testing

solidity-testing

github.com/0xlayerghostTesting & quality4135 installsUpdated 2w ago
Repository

About solidity-testing

solidity-testing is a set of testing standards for Solidity projects using Foundry. It guides developers on test organization, scenario coverage, fuzz testing, and commands for running targeted or complete test suites.

Key features

  1. 01Test file organization and naming
  2. 02Coverage for core-function scenarios
  3. 03Foundry cheatcode reference
  4. 04Fuzz testing for math and fund flows
  5. 05Commands for targeted test runs

Use cases

  1. 01Organize tests for individual contracts
  2. 02Check permission, boundary, and failure paths
  3. 03Add fuzz tests for fund-flow functions
  4. 04Run selected tests or the full suite

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/0xlayerghost/solidity-agent-kit --skill solidity-testing

After installing, type/solidity-testingin Claude Code to confirm it loaded.

Details

From the project README

Testing Standards

Language Rule

  • Always respond in the same language the user is using. If the user asks in Chinese, respond in Chinese. If in English, respond in English.

Test Organization

  • One test contract per source contract: MyToken.sol → MyToken.t.sol
  • File location: All tests in test/ directory
  • Naming: test_<feature>_<scenario> for passing tests, testFail_<feature>_<scenario> for expected reverts
    • Example: test_transfer_revertsWhenInsufficientBalance
    • Example: test_stake_updatesBalanceCorrectly
  • Independence: Each test must run in isolation — use setUp() for shared state, no cross-test dependencies
  • Filtering: Support --match-test and --match-contract for targeted runs

Coverage Requirements

Every core function must have tests covering:

ScenarioWhat to verify
Happy pathStandard input → expected output, correct state changes
Permission checksUnauthorized caller → vm.expectRevert with correct error
Boundary conditionsZero values, max values (type(uint256).max), off-by-one
Failure scenariosEvery require / revert / custom error path
State changesStorage updates, balance changes, event emissions (vm.expectEmit)
Edge casesEmpty arrays, duplicate calls, self-transfers

Foundry Cheatcodes Quick Reference

CheatcodeUsage
vm.prank(addr)Next call from addr
vm.startPrank(addr)All calls from addr until vm.stopPrank()
vm.warp(timestamp)Set block.timestamp
vm.roll(blockNum)Set block.number
vm.deal(addr, amount)Set ETH balance
vm.expectRevert(error)Next call must revert with specific error
vm.expectEmit(true,true,false,true)Verify event emission (topic checks)
vm.record() / vm.accesses()Track storage reads/writes
makeAddr("name")Create labeled address for readable traces

Fuzz Testing Rules

  • All math-heavy and fund-flow functions must have fuzz tests
  • Pattern: function testFuzz_<name>(uint256 amount) public
  • Use vm.assume() to constrain inputs: vm.assume(amount > 0 && amount < MAX_SUPPLY);
  • Default runs: 256 — increase to 10,000+ for critical functions: forge test --fuzz-runs 10000

Common Commands

# Run all tests
forge test

# Run specific test function
forge test --match-test test_transfer

# Run specific test contract
forge test --match-contract MyTokenTest

# Verbose output with full trace
forge test -vvvv

# Gas report
forge test --gas-report

# Fuzz with more runs
forge test --fuzz-runs 10000

# Test coverage
forge coverage

# Coverage with report
forge coverage --report lcov

Comments

Markdown supported