
代码 src/counter.cairo
#[starknet::interface]
trait ICounter<TContractState> {
    fn get_counter(self: @TContractState) -> u32;
}
#[starknet::contract]
mod Counter {
    use super::ICounter;
    #[storage]
    struct Storage {
        counter: u32
    }
    #[constructor]
    fn constructor(ref self: ContractState, counter: u32) {
        self.counter.write(counter);
    }
    #[abi(embed_v0)]
    impl ICounterImpl of ICounter<ContractState> {
        fn get_counter(self: @ContractState) -> u32 {
            self.counter.read()
        }
    }
}
src/lib.cairo
mod Counter;测试代码 tests/test_step.cairo
use super::utils::deploy_contract;
use counter::counter::{ICounterDispatcher, ICounterDispatcherTrait};
#[test]
fn check_stored_counter() {
    let initial_counter = 12;
    let contract_address = deploy_contract(initial_counter);
    let dispatcher = ICounterDispatcher { contract_address };
    let stored_counter = dispatcher.get_counter();
    assert!(stored_counter == initial_counter, "Stored value not equal");
}tests/utils.cairo
use starknet::{ContractAddress};
use snforge_std::{declare, cheatcodes::contract_class::ContractClassTrait};
pub fn deploy_contract(initial_value: u32) -> ContractAddress {
    let contract = declare("Counter").unwrap();
    let constructor_args = array![initial_value.into()];
    let (contract_address, _) = contract.deploy(@constructor_args).unwrap();
    contract_address
}
tests/lib.cairo
mod test_step;
mod utils;Scarb.toml
[package]
name = "counter"
version = "0.1.0"
edition = "2023_01"
# See more keys and their definitions at https://docs.swmansion.com/scarb/docs/reference/manifest.html
[dependencies]
starknet = ">=2.6.3"
[dev-dependencies]
snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry.git", tag = "v0.27.0" }
[[target.starknet-contract]]
[scripts]
test = "snforge test"
为什么会测试失败?
counter-workshop on  step4 [!] via ? base 
➜ scarb test       
     Running test counter (snforge test)
error: Identifier not found.
 --> /Users/qiaopengjun/Code/cairo/counter-workshop/tests/test_step.cairo:2:14
use counter::counter::{ICounterDispatcher, ICounterDispatcherTrait};
             ^*****^
error: Identifier not found.
 --> /Users/qiaopengjun/Code/cairo/counter-workshop/tests/test_step.cairo:2:14
use counter::counter::{ICounterDispatcher, ICounterDispatcherTrait};
             ^*****^
error: Method `get_counter` not found on type `<missing>`. Did you import the correct trait and impl?
 --> /Users/qiaopengjun/Code/cairo/counter-workshop/tests/test_step.cairo:9:37
    let stored_counter = dispatcher.get_counter();
                                    ^*********^
warning: Unused variable. Consider ignoring by prefixing with `_`.
 --> /Users/qiaopengjun/Code/cairo/counter-workshop/tests/test_step.cairo:7:9
    let contract_address = deploy_contract(initial_counter);
        ^**************^
Error: Failed to compile test artifact, for detailed information go through the logs above
[ERROR] Failed to build test artifacts with Scarb: `scarb` exited with error