有没有办法在 Rust 中测试宏?

Gar*_*uno 4 macros unit-testing rust

我正在尝试在 Rust 中开始使用 TDD,我需要编写一个宏,它返回枚举中的变体数量。我的实现与此类似:

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()
}
Run Code Online (Sandbox Code Playgroud)

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

mca*_*ton 6

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