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

Aptos Move单元测试调用timestamp报错求助:Failed to borrow global resource

在Move单元测试中调用timestamp::now_seconds()报错的解决方法

问题场景

编写了如下Move单元测试代码:

#[test]
fun get_seconds() {
    timestamp::now_seconds();
}

执行测试命令:

sudo aptos move test --package-dir sources

出现MISSING_DATA (code 4008)错误,提示无法从0x1地址借用全局资源CurrentTimeMicroseconds。

错误原因

Aptos的timestamp模块依赖的CurrentTimeMicroseconds全局资源,是链上环境中由Aptos框架在创世阶段部署初始化的。但单元测试运行在孤立的本地测试环境中,默认不会自动初始化这个全局资源,直接调用now_seconds()会因为找不到资源而报错。

解决方案

方案1:手动初始化时间资源

在测试函数中,先调用timestamp模块的初始化函数创建CurrentTimeMicroseconds资源(测试环境下允许模拟框架地址的权限):

#[test]
fun get_seconds() {
    // 模拟框架地址初始化时间资源,参数为微秒级时间戳
    timestamp::initialize(@aptos_framework, 1690000000000000);
    // 现在可以正常调用时间函数
    let _ = timestamp::now_seconds();
}

方案2:封装时间逻辑并Mock测试

如果业务代码依赖时间获取,可封装一层逻辑,在测试中替换为固定值,避免直接依赖框架模块:

// 业务模块中封装时间获取函数
public fun get_current_seconds(): u64 {
    timestamp::now_seconds()
}

// 测试专用的Mock函数
#[test_only]
public fun mock_get_current_seconds(): u64 {
    1690000000
}

// 测试用例
#[test]
fun test_with_mock_time() {
    let _ = mock_get_current_seconds();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 03:46:05