如何在Rust Playground中运行Doctest?示例执行失败
解决Rust Playground中Doctest的"未声明模块"错误
问题原因
Rust的文档测试(doctest)会将每个代码块作为独立编译单元处理,而Playground单文件环境默认不会自动导入当前crate的顶层函数/模块。原示例中使用doccomments::add是基于本地Cargo项目的自定义crate名称,但Playground默认crate名并非doccomments,且未显式导入目标函数,因此触发编译报错。
解决方案
方法1:显式导入当前模块内容
在文档测试的代码块开头添加use self::*;,直接导入当前crate的所有顶层项,适配任意crate名称:
/// 加法函数,计算两个i32的和 /// /// # Examples /// /// ``` /// use self::*; /// let result = add(2, 3); /// assert_eq!(result, 5); /// ``` pub fn add(a: i32, b: i32) -> i32 { a + b } fn main() { println!("2 + 3 = {}", add(2, 3)); }
方法2:直接调用顶层公开函数
对于顶层公开函数,文档测试允许直接调用(无需额外导入),可简化代码块:
/// 加法函数,计算两个i32的和 /// /// # Examples /// /// ``` /// let result = add(2, 3); /// assert_eq!(result, 5); /// ``` pub fn add(a: i32, b: i32) -> i32 { a + b } fn main() { println!("2 + 3 = {}", add(2, 3)); }
方法3:绑定当前crate别名
如果需要显式指定crate调用路径,可将当前crate绑定为Playground默认的别名:
/// 加法函数,计算两个i32的和 /// /// # Examples /// /// ``` /// extern crate self as playground; /// let result = playground::add(2, 3); /// assert_eq!(result, 5); /// ``` pub fn add(a: i32, b: i32) -> i32 { a + b } fn main() { println!("2 + 3 = {}", add(2, 3)); }
验证方式
在Playground中点击顶部的Test按钮(而非Run),即可执行cargo test,此时doctest会正常编译并运行测试。
内容的提问来源于stack exchange,提问作者SwimBikeRun
相关产品推荐
相关产品推荐

