在之前文章中,我们介绍了如何使用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: 恋水无意
腾讯云开发者社区:孟斯特
—