Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Інтеграційне тестування

Модульні тести тестують один модуль ізольовано за раз: вони невеликі і можуть тестувати приватний код. Інтеграційні тести є зовнішніми щодо вашого крейта і використовують лише його публічний інтерфейс так само, як це робив би будь-який інший код. Їхня мета — перевірити, що багато частин вашої бібліотеки правильно працюють разом.

Cargo шукає інтеграційні тести в каталозі tests поруч із src.

Файл src/lib.rs:

// Define this in a crate called `adder`.
pub fn add(a: i32, b: i32) -> i32 {
    a + b
}

Файл із тестом: tests/integration_test.rs:

#[test]
fn test_add() {
    assert_eq!(adder::add(3, 2), 5);
}

Запуск тестів за допомогою команди cargo test:

$ cargo test
running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

     Running target/debug/deps/integration_test-bcd60824f5fbfe19

running 1 test
test test_add ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

   Doc-tests adder

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

Кожен файл вихідного коду Rust у каталозі tests компілюється як окремий крейт. Щоб поділитися деяким кодом між інтеграційними тестами, ми можемо створити модуль із публічними функціями, імпортуючи та використовуючи його всередині тестів.

Файл tests/common/mod.rs:

pub fn setup() {
    // some setup code, like creating required files/directories, starting
    // servers, etc.
}

Файл із тестом: tests/integration_test.rs

// importing common module.
mod common;

#[test]
fn test_add() {
    // using common code.
    common::setup();
    assert_eq!(adder::add(3, 2), 5);
}

Створення модуля як tests/common.rs також працює, але не рекомендується, оскільки запускальник тестів розглядатиме файл як крейт для тестів і спробує запустити тести всередині нього.