测试时出现“调用上下文未设置错误”是怎么回事?

wxe*_*123 0 rust rust-cargo solana

当我在此代码上运行 Cargo test-bpf --manifest-path=./Cargo.toml 时

#[tokio::test]
async fn test_init_mapping() {
    let program_id = Pubkey::new_unique();
    let mut init_map_test = ProgramTest::new(
        "simple", // Run the BPF version with `cargo test-bpf`
        program_id,
        processor!(process_instruction), 
    );
    let main_pubkey = Pubkey::new_unique();
    let main_account = Account {
        lamports: 100,
        owner: program_id,
        ..Account::default()
    };
    init_map_test.add_account(main_pubkey, main_account);
    let (mut banks_client, payer, recent_blockhash) = init_map_test.start().await;
}
Run Code Online (Sandbox Code Playgroud)

我收到这个错误。

线程“test_init_mapping”因“调用上下文未设置!”而惊慌失措。**

我不知道如何调试这个,所以任何帮助都很棒。我已将问题范围缩小到最后一行。我的项目中一定有其他地方设置错误吗?

我不认为这段代码有问题,因为它是从 helloworld 示例中复制粘贴的。

编辑:我留下了原始问题的重要细节。在最后一行之后,我收到了 msg!("started"); ,我认为无关紧要,所以将其排除在外

Jon*_*n C 5

您的编辑是这里的关键部分:

编辑:我留下了原始问题的重要细节。在最后一行之后,我收到了 msg!("started"); ,我认为无关紧要,所以将其排除在外

如果您查看宏的代码msg!,它只是调用sol_log,在ProgramTest环境中,它变为此调用: https: //github.com/solana-labs/solana/blob/7a8807b8bba2a0bd41f696d3309487d6423a0b4b/program-test/src/lib.rs #L227

msg!只能从invoke_context设置了 的程序中调用,这就是您遇到此问题的原因。

要解决此问题,请删除对的调用msg!并使用简单的println!. 然而,在您的程序中,您可以随意使用msg!您想要的数量。