Grundlagen der Rust-Integrationstestung

RustRustBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab wird die Integrationstestung diskutiert, bei der mehrere Teile einer Bibliothek zusammen mithilfe ihrer öffentlichen Schnittstelle getestet werden. Integrationstests können im Verzeichnis tests neben dem Verzeichnis src in einem Rust-Crate platziert werden und mit dem Befehl cargo test ausgeführt werden. Darüber hinaus kann gemeinsamer Code zwischen Integrationstests geteilt werden, indem ein Modul mit öffentlichen Funktionen erstellt und innerhalb der Tests importiert wird.

Hinweis: Wenn das Lab keinen Dateinamen angibt, können Sie einen beliebigen Dateinamen verwenden. Beispielsweise können Sie main.rs verwenden und es mit rustc main.rs &&./main kompilieren und ausführen.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/DataStructuresandEnumsGroup(["Data Structures and Enums"]) rust(("Rust")) -.-> rust/AdvancedTopicsGroup(["Advanced Topics"]) rust(("Rust")) -.-> rust/ProjectManagementandOrganizationGroup(["Project Management and Organization"]) rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust/DataTypesGroup -.-> rust/integer_types("Integer Types") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/DataStructuresandEnumsGroup -.-> rust/method_syntax("Method Syntax") rust/AdvancedTopicsGroup -.-> rust/operator_overloading("Traits for Operator Overloading") rust/ProjectManagementandOrganizationGroup -.-> rust/module_system("Module System") subgraph Lab Skills rust/integer_types -.-> lab-99283{{"Grundlagen der Rust-Integrationstestung"}} rust/function_syntax -.-> lab-99283{{"Grundlagen der Rust-Integrationstestung"}} rust/expressions_statements -.-> lab-99283{{"Grundlagen der Rust-Integrationstestung"}} rust/method_syntax -.-> lab-99283{{"Grundlagen der Rust-Integrationstestung"}} rust/operator_overloading -.-> lab-99283{{"Grundlagen der Rust-Integrationstestung"}} rust/module_system -.-> lab-99283{{"Grundlagen der Rust-Integrationstestung"}} end

Integrationstestung

Unit-Tests testen jeweils ein Modul isoliert: Sie sind klein und können private Code testen. Integrationstests befinden sich außerhalb Ihres Crates und verwenden nur dessen öffentliche Schnittstelle, genauso wie jede andere Codebase. Ihr Zweck besteht darin, zu überprüfen, ob viele Teile Ihrer Bibliothek zusammen korrekt funktionieren.

Cargo sucht nach Integrationstests im Verzeichnis tests neben src.

Datei src/lib.rs:

// Definiere dies in einem Crate namens `adder`.
pub fn add(a: i32, b: i32) -> i32 {
    a + b
}

Datei mit Test: tests/integration_test.rs:

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

Ausführen von Tests mit dem Befehl 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

Jede Rust-Quelldatei im Verzeichnis tests wird als separates Crate kompiliert. Um Code zwischen Integrationstests zu teilen, können wir ein Modul mit öffentlichen Funktionen erstellen, es importieren und innerhalb der Tests verwenden.

Datei tests/common/mod.rs:

pub fn setup() {
    // Einige Setup-Code, wie das Erstellen von erforderlichen Dateien/Verzeichnissen, Starten
    // von Servern usw.
}

Datei mit Test: tests/integration_test.rs

// Importieren des gemeinsamen Moduls.
mod common;

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

Das Erstellen des Moduls als tests/common.rs funktioniert ebenfalls, wird jedoch nicht empfohlen, da der Testrunner die Datei als Test-Crate behandeln und versuchen wird, die darin enthaltenen Tests auszuführen.

Zusammenfassung

Herzlichen Glückwunsch! Sie haben das Lab zu Integrationstests abgeschlossen. Sie können in LabEx weitere Labs absolvieren, um Ihre Fähigkeiten zu verbessern.