You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust如何为私有模块内结构体方法编写无需公开模块的文档测试

解决方案

方案1:添加仅文档测试生效的条件重导出(最推荐)

在你的lib.rs中添加如下代码:

// 仅在运行文档测试时将目标结构体公开导出到 crate 根
#[cfg(doctest)]
pub use reader::BufferedOpenTypeFontReader;

这一导出仅在cargo test执行文档测试的编译阶段生效,正常编译发布库时不会暴露任何内部实现,完全符合你不公开reader模块的需求。

之后你的文档示例可以直接通过crate根导入结构体,例如:

# use your_crate_name::BufferedOpenTypeFontReader;
let reader = BufferedOpenTypeFontReader::new(/* 传入参数 */);

开头带# 前缀的导入行会参与编译测试,但不会渲染到最终的文档页面中,不影响用户阅读体验。


方案2:使用doc(test)属性放宽可见性(Rust 1.62+ 支持)

你也可以直接在私有模块的声明上添加属性,仅在文档测试阶段放开模块可见性:

#[cfg_attr(doctest, doc(test(visible)))]
mod reader;

该属性不会改变正常编译时的模块私有属性,仅作用于文档测试的编译阶段,文档示例中可以直接导入reader模块下的公开结构体。


方案3:迁移为内部单元测试

如果你不想修改任何模块可见性相关配置,可以把文档示例的代码迁移到reader模块内部的#[cfg(test)]单元测试块中,文档侧仅保留示例代码说明即可,缺点是无法保证文档示例和测试逻辑自动同步。

内容的提问来源于stack exchange,提问作者Complexity

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:36:03