Huwag hayaang lumabas ang test code sa produksyon
TL;DR: Iwasang magdagdag ng isTesting o mga katulad na flag.
Kapag nagdagdag ka ng mga flag tulad ng isTesting , pinaghalo mo ang testing at production code.
Lumilikha ito ng mga nakatagong landas na aktibo lamang sa mga pagsubok.
Gayundin, hindi mo saklaw ang tunay na code ng produksyon.
Ipagsapalaran mo ang pagpapadala ng gawi sa pagsubok sa produksyon, na humahantong sa mga bug at hindi nahuhulaang gawi.
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); } }
Made-detect mo ang amoy na ito sa pamamagitan ng paghahanap ng mga conditional na flag tulad ng isTesting , environment == 'test' , DEBUG_MODE , at mga idiom na tulad nito.
Ang mga ito ay nagpapahiwatig na ang pag-uugali ng pagsubok ay tumutulo sa code ng produksyon.
Kailangan mo ng malinaw na paghihiwalay sa pagitan ng test at production code.
Kapag pinaghalo mo ang mga ito, masisira mo ang one-to-one Bijection sa pagitan ng real-world na gawi at ng programa.
Dahil ang mga kapaligiran ay mga real-world na entity kailangan mong tahasang imodelo ang mga ito sa MAPPER .
Ang AI-generated code ay madalas na nagpapakilala ng amoy na ito kapag gumagamit ka ng mabilis na mga hack para sa pagsubok.
Ang ilang mga tool ay nagmumungkahi ng mga flag tulad ng isTesting dahil inuuna nila ang kadalian kaysa sa tamang disenyo.
Maaaring mahuli ng mga tool ng AI ang amoy na ito kung iko-configure mo ang mga ito upang i-flag ang conditional logic batay sa mga estado ng pagsubok.
Tandaan: Maraming pagkakamali ang AI Assistants
Iminungkahing Prompt: Alisin ang IsTesting method at palitan ito sa pamamagitan ng pagmomodelo ng mga environment
Nang walang Wastong Tagubilin | Sa Mga Tukoy na Tagubilin |
---|---|
Iwasang gumamit ng isTesting flag.
Gumamit ng dependency injection at i-modelo ang mga kapaligiran upang panatilihing magkahiwalay ang lohika ng pagsubok at produksyon.
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
Ang Code Smells ay opinyon ko.
Larawan ni Christian Gertenbach sa Unsplash
Kapag nagdagdag ka ng mga flag ng pagsubok, pinapahina mo ang tiwala sa produksyon.
Ward Cunningham
Ang artikulong ito ay bahagi ng CodeSmell Series.