Неужели не реально в тестовом модули, переопределять приватные свойства структуры?
mod A{
struct Test{
field: u8
}
}
mod B{}
#[cfg(test)]
mod test{
#[test]
fn test(){
let t = super::A::Test{
field: 3
};
assert_eq!(3,t.field);
}
}
Нужно протестировать модуль B, но при тесте необходима структура из модуля А, которая имеет приватные поля.
Аналогично java/c# можно использовать для поля field в структуре Test модификаторы видимости. Даже более гибко.
Например, можно сделать поле видимым для всего крейта, но недоступным за его пределами (аналог internal из C#)
mod A{
pub struct Test{
pub(crate) field: u8
}
}
https://doc.rust-lang.org/reference/visibility-and-privacy.html
Спасибо
Как раз то что нужно. Нужно будет найти все таки время на второе издание))) По поводу более гибко, не совсем согласен, в шарпе есть такая конструкция [assembly: InternalsVisibleTo("MyTestAssembly")], которая тоже дает подобные возможности. Конечно в идеале, хотелось бы, чтоб модуль помеченный #[cfg(test)] имел доступ к приватным свойствам всего crate, а не как сейчас только модуля в котором он находится
Я так понимаю, что идиоматичным в расте считается код для тестов нашпиговывать типажами и через них мокать всякое, а в приватную часть как раз не сильно лезть. Но это уже такое, филосовские холивары про подходы. 
Тут видишь какое дело… я использую генератор rust-qt-binding-generator. Он мне генерирует 2 файла. В одном я сам себе хозяин, второй имеет все существующие обвязки с С(interface). И вот получается что я протестить получается это дело не могу, даже с написанием pub(crate) или прочего. Потому что не владею тем файлом совсем. А он создает структуру, которую передаст мне для работы. И ее я ни как замокать не могу…
Получается все равно придется делать какой-то объект аля logic и использовать его во всех местах. Плюс тесты на qt которые. Только так получается я смогу выйти из сложившейся ситуации.