在之前文章中,我们介绍了如何使用Foundry将我们的合约部署到区块链上,现在简单介绍如何对已部署的合约进行测试。

还是以之前的SimpleStorage.sol合约为例:

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

interface IStorage  {
    function setString(string calldata newString) external;

    function getString() external view returns (string memory);
}

contract SimpleStorage {
    string private storedString;

    function setString(string memory newString) public {
        storedString = newString;
    }

    function getString() public view returns (string memory) {
        return storedString;
    }
}

在上面的合约中,我们定义IStorage接口,接口包含两个方法:

  • setString:设置字符串
  • getString:获取字符串

按照前面介绍的内容,合约部署完成后我们会得到合约的地址,因为我们的合约没有提供通过合约地址实例化的方法,所以我们需要使用接口的形式来调用部署后的合约。在test目录下创建String.t.sol文件:

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "forge-std/Test.sol";
import "../src/String.sol";

contract SimpleStorageTest is Test{
    IStorage public ss;
    uint256 deployerPrivateKey = vm.envUint("RAW_PRIVATE_KEY");
    address owner;
    function setUp() public {
        owner = vm.addr(deployerPrivateKey);
        address deployedAddress = 0x92dfaA34de4bcf1630f5DAE6df20c5DcF33018f1;
        ss = IStorage(deployedAddress);
    }

    function testSetString() public{
        ss.setString("Hello, world!");
        assertEq(ss.getString(), "Hello, world!");
    }
}

执行测试命令:

$ forge test --mt testSetString
[⠊] Compiling...
[⠑] Compiling 35 files with Solc 0.8.28
[⠒] Solc 0.8.28 finished in 1.66s
Compiler run successful!

Ran 1 test for test/String.t.sol:SimpleStorageTest
[PASS] testSetString() (gas: 33864)
Suite result: ok. 1 passed; 0 failed; 0 skipped; finished in 732.47µs (198.64µs CPU time)

Ran 1 test suite in 29.12ms (732.47µs CPU time): 1 tests passed, 0 failed, 0 skipped (1 total tests)

孟斯特

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意
腾讯云开发者社区:孟斯特