Тестирование по условию

Последнее обновление: 21.05.2024

Cargo позволяет нам задать условия, при которых тесты должны выполняться. Это производится с помощью атрибута

#[cfg(all(test, feature = название_условия))]

Здесь параметру feature передается название условия в виде строки, при котором должен выполняться тест.

Перед использованием условий их надо указать в файле Cargo.toml. Так, добавим в конец этого файла следующий код:

[features]
linux = []
windows = []

Секция [features] задает набор условий. Под этой секций на каждой строке указываем название условия и присваиваем ему пустые квадратные скобки. В данном случае у нас определено 2 условия: "linux" и "windows".

Далее определим тесты, которые используют эти условия. Для простоты пусть они будут находиться в файле main.rs:

fn main() {
    println!("Hello, World");
}

fn add(a: i32, b: i32) -> i32 { // функция для тестирования

    a + b
}

#[cfg(all(test, feature = "linux"))]
pub mod tests_linux {
use super::*; 

    #[test]
    fn test_add_linux() { 

        let input_1 = 2;
        let input_2 = 8;
        let result = add(input_1, input_2);
        assert_eq!(result, 10, "The addition result is incorrect.");
    }
}

#[cfg(all(test, feature = "windows"))]
pub mod tests_windows {
use super::*; 

    #[test]
    fn test_add_windows() { 

        let input_1 = 2;
        let input_2 = 8;
        let result = add(input_1, input_2);
        assert_eq!(result, 10, "The addition result is incorrect.");
    }
}

Здесь определено два модуля тестов, каждый из которых для примера содержит по одному тесту. Тесты из модуля tests_linux выполняются, если установлено условие "linux":

#[cfg(all(test, feature = "linux"))]
pub mod tests_linux {
........................

В этом случае выполняется функция test_add_linux()

А тест из модуля tests_windows (функция test_add_windows()) выполняется, если задано условие "windows".

Для установки условия при запуске тестов используется параметр --features, которому передается имя условия. Например, установим условие "linux":

eugene@Eugene:~/Documents/rust/unit$ cargo test --features linux
    Finished `test` profile [unoptimized + debuginfo] target(s) in 0.00s
     Running unittests src/main.rs (target/debug/deps/unit-919a61a1240c307a)

running 1 test
test tests_linux::test_add_linux ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

eugene@Eugene:~/Documents/rust/unit$ 

И мы видим, что в этом случае выполняется тест tests_linux::test_add_linux

Помощь сайту
Юмани:
410011174743222
Номер карты:
4048415020898850