Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Testing 如何使用#测试板条箱![没有标准]?_Testing_Rust - Fatal编程技术网

Testing 如何使用#测试板条箱![没有标准]?

Testing 如何使用#测试板条箱![没有标准]?,testing,rust,Testing,Rust,我正在为Rust中的编程语言实现编写运行时。我计划在这个运行时使用我生成的编译代码进行链接,因此为了保持二进制文件的小规模,我不想依赖std 当我尝试cargo test我的运行时,我会收到错误消息,说找不到std::slice::AsSlice,这是因为一些测试工具需要std库代码 我如何测试这段代码?有没有办法有条件地包含#![no_std]pragma,即测试时是否仍包含std库?我还尝试创建一个包含std库的独立测试板条箱,extern板条箱将运行时板条箱放入其中并在其中运行我的测试,但

我正在为Rust中的编程语言实现编写运行时。我计划在这个运行时使用我生成的编译代码进行链接,因此为了保持二进制文件的小规模,我不想依赖
std

当我尝试
cargo test
我的运行时,我会收到错误消息,说找不到
std::slice::AsSlice
,这是因为一些测试工具需要std库代码

我如何测试这段代码?有没有办法有条件地包含
#![no_std]
pragma,即测试时是否仍包含std库?我还尝试创建一个包含std库的独立测试板条箱,
extern板条箱
将运行时板条箱放入其中并在其中运行我的测试,但这带来了一系列全新的问题

#[cfg(test)]
#[macro_use]
extern crate std;

#[macro_use]
零件在Rust 2015中是可选的,在Rust 2018中不是必需的。

您可以将cfg_attr有条件地设置为无标准

#![cfg_attr(not(test), no_std)]

这似乎应该是正确的方法,但当我尝试并运行
cargo test
时,仍然会出现以下错误:
错误:尝试实现不存在的trait std::cmp::PartialEq
错误:无法解决。可能是缺少外部板条箱标准?
我还应该提到,只要删除
#[cfg(test)]
行,一切都能正常工作那么你就失去了
#的全部意义![无标准]
。在这种情况下,您应该提供自己的模块std,比如:
mod std{pub use core::cmp;}
我发现了问题所在。除了
#[cfg(测试)]外部板条箱标准行,我还需要使用std::prelude::*因为前奏曲不再自动导入。如果你不介意的话,还有一个简单的问题:有没有办法在这个设置中仍然使用像
#[derivate(Debug,PartialEq)]
这样的指令?@ZachSmith:
mod std{pub use core::fmt;pub use core::cmp;}
&c&C我会让它工作的。