我有两个位于tests
目录中的测试文件。每个测试文件都包含一个测试函数和一个公共结构。例如,它们都包含:
#[macro_use] extern crate serde_derive;
#[derive(Deserialize)]
struct MyStructure {
a_value: u8,
}
#[test]
// ...some test functions...
结构MyStructure
在两个测试文件之间完全相同。由于我的结构使用serde_derive
包中的宏,因此需要行#[macro_use] extern crate serde_derive
。
为了避免代码重复,我想只声明一次我的结构。根据我的理解,tests
目录中的每个文件都被编译为一个独立的包,因此编辑测试文件并将结构定义放入tests
目录中的单独文件似乎是不可能的: / p>
#[macro_use] extern crate serde_derive;
mod structure;
#[test]
// ...some test function...
#[macro_use] extern crate serde_derive;
#[derive(Deserialize)]
struct Structure {
a_value: u8,
}
第一次尝试导致error[E0468]: an extern crate loading macros must be at the crate root
。这是正常的,因为structure
现在是一个子模块。
从#[macro_use] extern crate serde_derive;
移除structure
也没有帮助,因为structure
被编译为单独的包,现在无法找到Deserialize
:{{1 }}
将error: cannot find derive macro Deserialize in this scope
(包括宏用法)移动到单独的公共文件中的正确方法是什么,并且只为我的所有测试文件定义一次?