Nie pozwól, aby kod testowy przedostał się do produkcji
W skrócie: Unikaj dodawania flag isTesting i podobnych.
Gdy dodajesz flagi takie jak isTesting , mieszasz kod testowy i produkcyjny.
Tworzy to ukryte ścieżki, które są aktywne tylko w testach.
Ponadto nie omawiasz prawdziwego kodu produkcyjnego.
Istnieje ryzyko przeniesienia zachowań testowych do produkcji, co może prowadzić do błędów i nieprzewidywalnego zachowania.
struct PaymentService { is_testing: bool, } impl PaymentService { fn process_payment(&self, amount: f64) { if self.is_testing { println!("Testing mode: Skipping real payment"); return; } println!("Processing payment of ${}", amount); } }
trait PaymentProcessor { fn process(&self, amount: f64); } struct RealPaymentProcessor; impl PaymentProcessor for RealPaymentProcessor { fn process(&self, amount: f64) { println!("Processing payment of ${}", amount); } } struct TestingPaymentProcessor; impl PaymentProcessor for TestingPaymentProcessor { // Notice this is not a mock fn process(&self, _: f64) { println!("No payment: Skipping real transaction"); } } struct PaymentService<T: PaymentProcessor> { processor: T, } impl<T: PaymentProcessor> PaymentService<T> { fn process_payment(&self, amount: f64) { self.processor.process(amount); } }
Możesz wykryć ten zapach, sprawdzając flagi warunkowe, takie jak isTesting , environment == 'test' , DEBUG_MODE i podobne idiomy.
Oznacza to, że zachowanie testowe przedostaje się do kodu produkcyjnego.
Konieczne jest wyraźne oddzielenie kodu testowego od kodu produkcyjnego.
Gdy je wymieszasz, rozbijasz bijekcję jeden do jednego między zachowaniem w świecie rzeczywistym a programem.
Ponieważ środowiska są bytami świata rzeczywistego, należy je jawnie modelować w MAPPER .
Kod generowany przez sztuczną inteligencję często wprowadza ten problem, gdy do testowania stosuje się szybkie sztuczki.
Niektóre narzędzia sugerują flagi takie jak isTesting , ponieważ priorytetowo traktują łatwość obsługi, a nie poprawny projekt.
Narzędzia AI mogą wykryć ten problem, jeśli skonfigurujesz je tak, aby sygnalizowały logikę warunkową na podstawie stanów testowych.
Pamiętaj: asystenci AI popełniają wiele błędów
Sugerowany monit: Usuń metodę IsTesting i zastąp ją modelowaniem środowisk
Bez odpowiednich instrukcji | Ze szczegółowymi instrukcjami |
---|---|
Unikaj stosowania flag isTesting .
Użyj wstrzykiwania zależności i modeluj środowiska, aby oddzielić logikę testowania od logiki produkcji.
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxii
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xiii
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-vi-cmj31om
Zapachy kodów to moja opinia .
Zdjęcie autorstwa Christiana Gertenbacha na Unsplash
Dodając flagi testowe podważasz zaufanie do środowiska produkcyjnego.
Ward Cunningham
Niniejszy artykuł jest częścią serii CodeSmell.