我在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
目录中的每个文件都被编译为单独的 crate,因此似乎无法编辑测试文件并将结构定义放入tests
目录中的单独文件中:
#[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;
fromstructure
也无济于事,因为structure
它是作为单独的 crate 编译的,现在Deserialize
找不到:error: cannot find derive macro Deserialize in this scope
.
MyStructure
将(包括宏使用)移动到单独的公共文件并为我的所有测试文件只定义一次的正确方法是什么?