Вопрос:

Как вызвать функции, которые не находятся внутри модуля из тестового модуля?

rust

389 просмотра

1 ответ

549 Репутация автора

Это содержимое моего src/lib.rsфайла:

pub fn foo() {}

#[cfg(test)]
mod tests {
    #[test]
    fn it_works() {
        foo();
    }
}

Когда я бегу cargo test, я получаю следующую ошибку:

error[E0425]: cannot find function `foo` in this scope
 --> src/lib.rs:7:9
  |
7 |         foo();
  |         ^^^ not found in this scope

Как мне позвонить fooизнутри testмодуля?

Автор: Michael Hewson Источник Размещён: 14.10.2016 01:29

Ответы (1)


3 плюса

414283 Репутация автора

Решение

Вы можете использовать super::для ссылки на родительский модуль:

fn it_works() {
    super::foo();
}

В Rust 2015 вы можете использовать ::ссылку на корневой модуль корзины:

fn it_works() {
    ::foo();
}

В Rust 2018 вы можете использовать crate::для ссылки на корневой модуль ящика:

fn it_works() {
    crate::foo();
}

Или, как fooможет быть использовано несколько раз, вы можете сделать useэто в модуле:

mod tests {
    use foo;         // <-- import the `foo` from the root module
    // or
    use super::foo;  // <-- import the `foo` from the parent module

    fn it_works() {
        foo();
    }
}

Для тестовых модулей также распространено импортировать все из родительского модуля:

mod tests {
    use super::*;  // <-- import everything from the parent module

    fn it_works() {
        foo();
    }
}
Автор: kennytm Размещён: 14.10.2016 01:37
Вопросы из категории :
32x32