testing - 如何在松露中测试应付方法?
问题描述
我正在尝试在松露框架中测试智能合约的支付方法:
contract Contract {
mapping (address => uint) public balances;
function myBalance() public view returns(uint) {
return balances[msg.sender];
}
function deposit() external payable {
balances[msg.sender] += msg.value;
}
}
contract TestContract {
function testDeposit() external payable {
Contract c = new Contract();
c.deposit.value(1);
Assert.equal(c.myBalance(), 1, "#myBalance() should returns 1");
}
}
在我运行之后truffle test
,它失败并TestEvent(result: <indexed>, message: #myBalance() should returns 1 (Tested: 0, Against: 1))
出现错误。为什么?
解决方案
您的测试合同有几个问题。首先是你没有初始化你的测试合约来持有任何以太币。因此,没有持有的资金TestContract
要发送到Contract
。为此,您需要设置一个initialBalance
合约存储变量(请参阅测试以太交易)。
其次,你没有deposit
正确调用你的函数。要调用函数并发送以太币,格式为contract.functionName.value(valueInWei)(<parameter list>)
.
这是固定版本TestContract
:
contract TestContract {
uint public initialBalance = 1 wei;
function testDeposit() external payable {
Contract c = new Contract();
c.deposit.value(1)();
Assert.equal(c.myBalance(), 1, "#myBalance() should returns 1");
}
}
推荐阅读
- maven - 将 nexus 添加到 settings.xml 后无法找到存储库
- python - 将网页美化结果保存到 CSV 或 excel 文件中
- service-layer - 在服务层的实体中添加属性?
- python - 即使多处理任务未完成,Pandas to_csv 也会停止更新文件
- laravel - Laravel 8 Fortify 登录显示 429 太多请求
- flutter - 将文档中的值从数据库保存到 initState 值的颤振问题
- model - 如何在 Visio 形状数据中显示多行文本?
- ios - 防止 UIButton showsTouchWhenHighlighted 更改 VoiceOver 描述
- pdf - 通过 Apps 脚本将工作表导出为 PDF(现在有些变化不再可搜索且文件大小更大)
- r - 关于 R 中的因子,levels() 与 labels() 有何不同?