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