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.