rust - 如何将当前 crate 中定义的宏导入 doc 测试?
问题描述
我正在尝试编写一个文档测试,它使用我在我正在编写文档测试的箱子中定义的宏。我编写了这个重现问题的综合示例:
#[macro_export]
macro_rules! my_vec {
($($element: expr),*) => {
crate::MyVec::from_vec(vec![$($element),*])
}
}
pub mod my_vector {
#[derive(Debug, Eq, PartialEq)]
pub struct MyVec<T> {
vec: Vec<T>
}
impl <T> MyVec<T> {
pub fn from_vec(vec: Vec<T>) -> Self {
Self { vec }
}
/// ```
/// # // what can I put here to make the doc test compile?
/// let mut v = my_vec![1,2,3];
/// v.clear();
/// assert_eq!(v, my_vec![]);
/// ```
pub fn clear(&mut self) {
*self = my_vec![]
}
}
}
pub use my_vector::MyVec;
fn main() {
let mut v = my_vec![1,2,3];
v.clear();
assert_eq!(v, my_vec![]);
}
如果我运行代码,main
函数会按预期正常运行,但是如果我尝试运行测试,包含相同代码的 doc 测试会导致以下错误:
---- src/lib.rs - my_vector::MyVec<T>::clear (line 19) stdout ----
error: cannot find macro `my_vec` in this scope
--> src/lib.rs:21:13
|
4 | let mut v = my_vec![1,2,3];
| ^^^^^^
error: cannot find macro `my_vec` in this scope
--> src/lib.rs:23:15
|
6 | assert_eq!(v, my_vec![]);
| ^^^^^^
如何将宏导入测试?
解决方案
推荐阅读
- puppet - 创建证书并在 puppetserver 上签名,然后交付给客户端
- javascript - 如何在移动设备上通过 WebAuthn 使用 FIDO 凭据
- c# - 一个用于更新两个 UI 文本的脚本
- java - spring boot 按字段搜索规范查找
- swift - ReactiveSwift 链接的 SignalProducers 不会将完成发送到下游
- c# - 使用 c# 将大型 SQL Server 结果导出到 excel(行数 = 100 万)
- python - 如何正确解析 html 并找到正确的元素
- azure - 使用 ARM 创建的 Azure DevOps SSH Linux VM
- vue.js - 如何更改另一个组件数据
- php - 使用 php 从 mysqli 中选择具有有趣字符的字符串