2016-06-23 4 views
6

У меня есть образующий путь следующего код, в котором сгенерированные файлы могут быть размещены:Где я должен поместить функции утилиты тестирования в Rust?

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

Этой функция определена в tests/lib.rs, используемый в тестах в этом файл, и я хотел бы использовать его в модульных тестах расположенный в src/lib.rs.

Можно ли достичь этого без компиляции функций утилиты в не-тестовый двоичный код и без дублирующего кода?

+0

Разве вы не можете переместить эту funcionality в 'SRC/lib.rs', а затем использовать его в' Тесты/lib.rs'? –

+0

@ DanielFath Я пробовал это и аннотировал с помощью '# [test]', чтобы избежать компиляции в release-двоичный код и получил эту ошибку: «функции, используемые в качестве тестов, должны иметь подпись fn() ->()« – PureW

+0

Можете ли вы попробовать поставить ' #cfg (not (test)) ', который удалит ваш код на этапах без тестирования. –

ответ

4

Что я делаю кладу модульных тестов с другими утилитами в подмодуль защищенной #[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

Как насчет интеграционных тестов? Мне нужно интегрироваться с базой данных, но я не хочу создавать зависимость только для тестов. Интеграционные тесты хорошо работают для моей проблемы, пока мне не нужно повторно использовать служебные функции. Думаю, я пойду и создаю ящик testutil ... – weberc2

Смежные вопросы