在 Rust 中创建一个新的 ManagedBuffer 测试恐慌 "called Option::unwrap() on a None"

Creating a new ManagedBuffer in Rust tests panics "called Option::unwrap() on a None"

我正在尝试在 Rust 测试中创建一个新的 ManagedBuffer,但测试出现错误。我试过同时使用 ManagedBuffer::new_from_bytes 函数和 managed_buffer! 宏,但它们都会导致相同的错误:

thread 'use_managed_buffer_new_from_bytes' panicked at 'called Option::unwrap() on a None value', /home/mccuna/elrondsdk/vendor-rust/registry/src/github.com-1ecc6299db9ec823/elrond-wasm-debug-0.27.4/src/tx_mock/tx_context_stack.rs:16:28

thread 'use_managed_buffer_macro' panicked at 'called Option::unwrap() on a None value', /home/mccuna/elrondsdk/vendor-rust/registry/src/github.com-1ecc6299db9ec823/elrond-wasm-debug-0.27.4/src/tx_mock/tx_context_stack.rs:16:28

// test_test.rs
use elrond_wasm::types::ManagedBuffer;
use elrond_wasm_debug::{managed_buffer, tx_mock::TxContextRef};

#[test]
fn use_managed_buffer_macro() {
  let test: ManagedBuffer<TxContextRef> = managed_buffer!(b"Test");
}

#[test]
fn use_managed_buffer_new_from_bytes() {
  let test = ManagedBuffer::<TxContextRef>::new_from_bytes(b"Test");
}

使用的版本:

[dependencies.elrond-wasm]
version = "0.27.4"

[dev-dependencies.elrond-wasm-debug]
version = "0.27.4"

接近 this docs section 的末尾提到“请记住,您不能在 execute_tx 函数之外创建托管类型。如果需要这样做,您应该使用 blockchain_wrapper.execute_in_managed_environment()"

因此,从字节创建 ManagedBuffer 的默认解决方案是在 blockchain_wrapper.execute_in_managed_environment() 闭包内进行调用。

blockchain_wrapper.execute_in_managed_environment() 的替代方法是在调用 ManagedBuffer::new_from_bytes 之前调用 let _ = DebugApi::dummy();DebugApi::dummy() 实例化 ManagedBuffer::new_from_bytes 在 Rust 测试中工作所需的模拟。

P.s.: DebugApi::dummy() 适用于静态字段。我没有检查过,但多次调用它可能会导致问题
P.p.s:谢谢马丁!