Тест груза не может ссылаться на что-либо общедоступное внутри таргетинга в интеграционном тесте. Модульные тесты также не могут найти тестовые случаи - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь выполнить какой-либо тест на моем модуле no_std, но не могу заставить работать как интеграцию, так и юнит-тестирование. Я думаю, что груз не делает функции и модули видимыми для других.

Проект находится по адресу: https://github.com/ShisoftResearch/Nulloc/tree/e2e15646da79651ddb8c29e0526bad0d60690bec

Выполнить cargo test, я получил:

➜ cargo test
   Compiling nulloc v0.1.0 (/Users/shisoft/Dropbox/Code/OSS Projects/Nulloc)
error[E0432]: unresolved import `nulloc::bump_heap`
 --> tests/bump_heap.rs:3:14
  |
3 |  use nulloc::bump_heap::BumpAllocator;
  |              ^^^^^^^^^ could not find `bump_heap` in `nulloc`

error[E0432]: unresolved import `nulloc::bump_heap`
 --> tests/bump_heap.rs:3:14
  |
3 |  use nulloc::bump_heap::BumpAllocator;
  |              ^^^^^^^^^ could not find `bump_heap` in `nulloc`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0432`.
error: aborting due to previous error

For more information about this error, try `rustc --explain E0432`.
error: could not compile `nulloc`.
warning: build failed, waiting for other jobs to finish...
error: could not compile `nulloc`.

To learn more, run the command again with --verbose.

Но я уже вышел за пределы ящика, который собираюсь протестировать в tests.rs, а bump_heap помечен как открытый в lib.rs.

Когда я пытаюсь выполнить модульный тест внутри bump_heap.rs груз не может найти контрольные примеры.

Я не уверен, что здесь происходит

1 Ответ

0 голосов
/ 19 октября 2019

Проблема в том, что тестовая среда Rust неявно использует встроенную тестовую библиотеку, которая зависит от стандартной библиотеки. Это означает, что мы не можем использовать тестовый фреймворк по умолчанию для нашего #[no_std] ядра.

Блог Филиппа Опперманна

Это мое понимание, которое вам понадобитсяпользовательские рамки. Мой ответ основан на цитируемом блоге джентльмена.

  1. Закомментируйте или удалите тесты в каталоге tests.

  2. Создайте src/main.rs с помощьюследующий код.

#![feature(custom_test_frameworks)]
#![test_runner(crate::test_runner)]
extern crate nulloc;
//pub mod bump_heap;

fn main() {}

#[cfg(test)]
fn test_runner(tests: &[&dyn Fn()]) {
    println!("Running {} tests", tests.len());
    for test in tests {
        test();
    }
}

#[test_case]
fn fails() {
    assert_eq!(true, false);
}

К вашему сведению Я закомментировал pub mod bump_heap, потому что есть ошибки компилятора.

Использовать по ночам для запуска тестов.

Если у вас не установлена ​​ржавчина по ночам:

rustup install nightly

Запускать тесты как ночью:

rustup run nightly cargo test

Модульные и интеграционные тесты

Если вы прочитаете этот связанный блог, он подробно расскажет о том, как проводить интеграционные тесты и еще много чего. Полагаю, на данный момент вы можете просто использовать mod в main.rs или что-то еще ради организации.

mod integration {
    use super::*;

    #[test_case]
    fn works() {
        assert!(true);
    }   
}

mod bump_heap_unit {
    use super::bump_heap;

    #[test_case]
    fn works() {
        assert!(true);
    }   
}   
...