3分钟Solidity: 14.2 Foundry授权测试

16 阅读1分钟

欢迎订阅专栏3分钟Solidity--智能合约--Web3区块链技术必学

Foundry 授权

有关此内容的最新版本,请参阅 Cyfrin.io 上的Foundry授权(代码示例)

// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

import {Test, console2, stdError} from "forge-std/Test.sol";

contract Auth {
    address public owner;

    constructor() {
        owner = msg.sender;
    }

    function setOwner(address _owner) external {
        require(msg.sender == owner, "not authorized");
        owner = _owner;
    }
}

contract AuthTest is Test {
    Auth private auth;

    function setUp() public {
        // owner = 本合约
        auth = new Auth();
    }

    function testSetOwner() public {
        auth.setOwner(address(1));
        assertEq(auth.owner(), address(1));
    }

    function testFailNotOwner() public {
        // Next call will be called by address(1)
        vm.prank(address(1));
        auth.setOwner(address(1));

        vm.startPrank(address(1));
        // All calls until stopPrank will be made by address(1)
        auth.setOwner(address(1));
        auth.setOwner(address(1));
        auth.setOwner(address(1));
        vm.stopPrank();
    }
}

Try on Remix