2016-06-23 16 views
6

Ho il seguente codice definente un percorso in cui i file generati possono essere posizionati:Dove dovrei inserire le funzioni di utilità di test in Rust?

fn gen_test_dir() -> tempdir::TempDir {           
    tempdir::TempDir::new_in(Path::new("/tmp"), "filesyncer-tests").unwrap() 
} 

Questa funzione è definita tests/lib.rs, utilizzato nelle prove in quel file e vorrebbe anche utilizzare nelle prove di unità situato in src/lib.rs.

È possibile ottenere questo risultato senza compilare le funzioni di utilità nel binario non di test e senza codice di duplicazione?

+0

Non puoi spostare tale funcionality in 'src/lib.rs' e poi utilizzarlo in' test/lib.rs'? –

+0

@DanielFath Ho provato questo e annotato con '# [test]' per evitare di compilarlo in release-binary e ho ricevuto questo errore: "le funzioni utilizzate come test devono avere la firma fn() ->()" – PureW

+0

Puoi provare a mettere ' #cfg (not (test)) 'che rimuoverà il codice durante le fasi non di test. –

risposta

4

Quello che faccio è mettere mio test di unità con tutti gli altri programmi di utilità in un modulo protetto con #[cfg(test)]:

#[cfg(test)] 
mod tests { // The contents could be a separate file if it helps organisation 
    // Not a test, but available to tests. 
    fn some_utility(s: String) -> u32 { 
     ... 
    } 

    #[test] 
    fn test_foo() { 
     assert_eq!(...); 
    } 
    // more tests 
} 
+0

E i test di integrazione? Ho bisogno di integrarmi con un database, ma non voglio creare una dipendenza solo per i test. I test di integrazione funzionano bene per il mio problema fino a quando non ho bisogno di riutilizzare le funzioni di utilità. Credo che andrò a creare una cassetta testutil ... – weberc2

Problemi correlati