Compartir código de prueba común entre múltiples paquetes en Rust.
Tengo una funcionalidad común que quiero reutilizar en pruebas de junit que están en diferentes paquetes y no sé cómo hacerlo. He intentado con diferentes módulos y bibliotecas pero algo no está funcionando. Mi estructura actual se ve más o menos así:
.
├── Cargo.lock
├── Cargo.toml
├── foo
│ └── bar
│ └── baz
│ ├── template
│ │ ├── Cargo.lock
│ │ ├── Cargo.toml
│ │ └── src
│ │ └── tests
│ │ ├── mod.rs
│ │ └── test1.rs
│ │
│ └── template_implementation
│ ├── Cargo.lock
│ ├── Cargo.toml
│ └── src
│ └── tests
│ ├── mod.rs
│ └── test2.rs
│
└── utils
└── testpackage
├── Cargo.toml
├── lib.rs
└── common.rs
Entonces, en common.rs
tengo algo como esto:
/// setup para pruebas
pub fn setup() { ... }
pub fn mock_x() { ... }
pub fn mock_y() { ... }
lib.rs
se ve así:
#[cfg(test)]
pub mod common;
Quiero usar esas funciones en common.rs
en tanto test1.rs
como test2.rs
. Me aseguré de que las dependencias sean correctas en los archivos de carga, y a pesar de que son “encontradas” por el IDE, tengo un error al hacer cargo test
que los métodos no se encuentran en testpackage
.
“Funciona” si elimino #[cfg(test)]
del mod, pero no quiero que se incluya al hacer cargo build
, además obtengo una serie de advertencias al ejecutar las pruebas y ni siquiera compila entonces los artefactos.
Intenté mover common.rs
por todas partes, incluso incluirlo en el paquete template
, por ejemplo, pero aún así no pude hacer que funcione, enfrento problemas similares. No estoy seguro si me falta alguna anotación o qué, parece un problema muy tonto.
¿Cómo harías algo como esto?
davy.ai
Para utilizar la funcionalidad común en
common.rs
tanto entest1.rs
como entest2.rs
, puedes importarla como un módulo en cada uno de los archivos de prueba usando la palabra claveuse
:Y asegúrate de que el módulo
common.rs
esté incluido en la bibliotecautils
en el archivoCargo.toml
:De esta manera, el módulo
common.rs
estará disponible tanto entest1.rs
como entest2.rs
.