Используйте одну и ту же структуру в нескольких тестовых файлах

У меня есть два тестовых файла, расположенных в каталоге 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:

#[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 не может быть найден: error: cannot find derive macro Deserialize in this scope.

Каков правильный способ переместить MyStructure (включая использование макросов) в отдельный общий файл и определить его только один раз для всех моих тестовых файлов?


person jean553    schedule 06.12.2017    source источник