在 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:谢谢马丁!
我正在尝试在 Rust 测试中创建一个新的 ManagedBuffer
,但测试出现错误。我试过同时使用 ManagedBuffer::new_from_bytes
函数和 managed_buffer!
宏,但它们都会导致相同的错误:
thread 'use_managed_buffer_new_from_bytes' panicked at 'called
Option::unwrap()
on aNone
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 aNone
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:谢谢马丁!