0

当我在此代码上运行 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;
}

我得到这个错误。

线程“test_init_mapping”在“未设置调用上下文!”时惊慌失措 **

我不知道如何调试它,所以任何帮助都很棒。我已将问题缩小到最后一行。我必须在我的项目中的某个地方设置其他错误?

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

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

4

1 回答 1

3

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

编辑:我留下了原始问题的重要细节。在最后一行之后我有 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!

于 2021-08-17T16:27:36.747 回答