有没有一种方法可以在Rust中测试宏?

3

我正在尝试在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()
}

首先,我想编写一个测试来检查此宏是否仅适用于枚举。这该如何实现?我是否可以在单元测试中检查文件是否编译通过?是否有一些关于测试Rust宏的文档我忽略了?

1个回答

5

trybuild crate是专门为此创建的:它会编译测试文件,然后检查是否有预期的编译时错误。


1
另外macrotest也是一个类似的选择。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接