2016-06-23 11 views
6

Mam następujący kod określający ścieżkę gdzie generowane pliki mogą być umieszczone:Gdzie powinienem umieścić funkcje narzędzia testowego w Rust?

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

Funkcja ta jest zdefiniowana w tests/lib.rs, używany w testach w tym pliku i chciałbym również, aby używać go w testach jednostkowych znajduje się w src/lib.rs.

Czy można to osiągnąć bez kompilacji funkcji narzędziowych do binarnego kodu niebędącego testem i bez powielania kodu?

+0

Czy nie można przenieść do tego Funkcjonalność 'src/lib.rs' a następnie używać go w' tests/lib.rs'? –

+0

@DanielFath Próbowałem tego i dodałem adnotację z '# [test]', aby uniknąć kompilacji do release-binary i otrzymałem ten błąd: "funkcje używane jako testy muszą mieć podpis fn() ->()" – PureW

+0

Czy możesz spróbować wstawić ' #cfg (not (test)), który usunie twój kod, podczas faz bez testowania. –

Odpowiedz

4

Co mogę zrobić, to umieścić moje testów jednostkowych z innych narzędzi do modułem chronionej #[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

Co z testami integracyjnymi? Muszę zintegrować się z bazą danych, ale nie chcę tworzyć zależności tylko dla testów. Testy integracyjne sprawdzają się w moim problemie, dopóki nie będę musiał ponownie korzystać z funkcji narzędziowych. Chyba pójdę i utworzę skrzynkę testutil ... – weberc2

Powiązane problemy