0 Tage Serie
rust / expert
Snippet

Entkopplung externer Ressourcen in Unit-Tests unter Verwendung von Mock-Traits

Bei Unit-Tests ist die Entkopplung der Geschäftslogik von externen Komponenten unerlässlich. Durch die Abstraktion von Schnittstellen in Traits können Mock-Implementierungen verschiedene Bedingungen wie Verbindungsfehler oder Grenzfälle simulieren und so eine robuste Testabdeckung gewährleisten, ohne Live-Netzwerk- oder Datenbankdienste aufzurufen.

snippet.rs
rust
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
pub trait Transceiver {
fn send_payload(&self, data: &[u8]) -> Result<(), &'static str>;
}
pub struct MockTransceiver {
pub force_failure: bool,
}
impl Transceiver for MockTransceiver {
fn send_payload(&self, data: &[u8]) -> Result<(), &'static str> {
if self.force_failure || data.is_empty() {
Err("Network failure simulation")
} else {
Ok(())
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_payload_handling() {
let mock = MockTransceiver { force_failure: true };
assert!(mock.send_payload(b"hello").is_err());
}
}
Erklärung
1
pub trait Transceiver {
Deklariert ein Trait, das Standard-Messaging-Verhalten darstellt, um Netzwerk-Seiteneffekte zu isolieren.
2
pub struct MockTransceiver {
Definiert eine Mock-Struktur mit Konfigurationsparametern zur manuellen Steuerung von Testergebnissen.
3
#[cfg(test)]
Stellt sicher, dass das folgende Modul ausschließlich beim Ausführen von Cargo-Testbefehlen kompiliert und ausgeführt wird.