You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Truffle测试前设置智能合约变量以测试条件函数?

在Truffle测试前设置智能合约变量的实现方案

1. 编写带数值条件限制的智能合约

先实现一个包含var_1变量和受限函数的Solidity合约,函数仅在var_1 >= 800时允许执行:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract RestrictedContract {
    uint256 public var_1;

    // 用于设置var_1的函数(测试环境可自由调用,生产环境可加权限控制)
    function setVar1(uint256 _value) external {
        var_1 = _value;
    }

    // 仅在var_1 >=800时可执行的函数
    function restrictedFunction() external view returns (string memory) {
        require(var_1 >= 800, "var_1 must be at least 800");
        return "Function executed successfully";
    }
}

2. 编写Truffle测试用例

在Truffle的测试文件(如test/RestrictedContract.test.js)中,通过合约的setVar1函数在测试前设置var_1的值,分别验证两种场景:

测试场景1:var_1=799时验证函数执行失败

const RestrictedContract = artifacts.require("RestrictedContract");

contract("RestrictedContract", (accounts) => {
  it("should fail when var_1 is 799", async () => {
    const contractInstance = await RestrictedContract.deployed();
    // 设置var_1为799
    await contractInstance.setVar1(799);
    
    try {
      await contractInstance.restrictedFunction();
      // 如果走到这里说明测试失败,抛出错误
      assert.fail("Function should have reverted");
    } catch (error) {
      // 验证revert的错误信息匹配
      assert.include(error.message, "var_1 must be at least 800", "Incorrect revert message");
    }
  });
});

测试场景2:var_1=801时验证函数执行成功

const RestrictedContract = artifacts.require("RestrictedContract");

contract("RestrictedContract", (accounts) => {
  it("should succeed when var_1 is 801", async () => {
    const contractInstance = await RestrictedContract.deployed();
    // 设置var_1为801
    await contractInstance.setVar1(801);
    
    const result = await contractInstance.restrictedFunction();
    // 验证返回值符合预期
    assert.equal(result, "Function executed successfully", "Function did not execute correctly");
  });
});

关键说明

  • 合约中添加setVar1函数是为了在测试阶段灵活修改var_1的值,生产环境中可根据需求添加权限控制(比如仅合约所有者可调用)。
  • Truffle测试中使用try/catch捕获revert操作,以此验证函数执行失败的场景;成功场景则直接调用函数并校验返回结果。

内容的提问来源于stack exchange,提问作者Robert Johnstone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 20:09:22