unit-testing - 有没有一种方法可以测试 rust 中的宏?

标签 unit-testing rust macros

我试图在Rust中开始使用TDD,我需要编写一个宏,该宏返回枚举中变体的数量。我的实现类似于this one:

extern crate proc_macro;
extern crate syn;
#[macro_use]
extern crate quote;

use proc_macro::TokenStream;

#[proc_macro_derive(EnumVariantCount)]
pub fn derive_enum_variant_count(input: TokenStream) -> TokenStream {
    let syn_item: syn::DeriveInput = syn::parse(input).unwrap();
    let len = match syn_item.data {
        syn::Data::Enum(enum_item) => enum_item.variants.len(),
        _ => panic!("EnumVariantCount only works on Enums"),
    };
    let expanded = quote! {
    const LENGTH: usize = #len;
        };
    expanded.into()
}

因此,首先我想编写一个测试来检查此宏是否仅适用于枚举。这怎么工作?我可以以某种方式检查文件是否可以在单元测试中编译吗?是否有一些有关测试我忽略的 rust 宏的文档?

最佳答案

专门为此创建了 trybuild 条板箱:它编译测试文件,然后检查预期的编译时错误。

关于unit-testing - 有没有一种方法可以测试 rust 中的宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61171437/

相关文章:

python - 使用 patch decorator 和 side_effect 模拟文件读取

unit-testing - 在 VS2010 中使用 MStest 对 .NET 3.5 项目进行单元测试

rust - 具有内部可变性的细胞,允许任意突变 Action

rust - Cargo 是否依赖于从源代码构建 Cargo 本身?

c - 一元运算有时是自杀性的。弄乱 C 代码

typescript - 用 Jest 测试 TypeScript : "no overload matches this call"

java - Chrome 驱动异常 NoSuchMethodError

rust - Rust 的一元 || 是什么意思(平行管)是什么意思?

objective-c - 如何将函数的结果作为宏变量传递?

c++ - 关于使用#define 有条件地排除主函数时的 C++ 预处理器