Code Smell 293 – You Should Avoid Adding isTesting or Similar Flags

When you add flags like isTesting, you mix testing and production code. This creates hidden paths that are only active in tests.


This content originally appeared on HackerNoon and was authored by Maximiliano Contieri

Don’t let test code sneak into production

TL;DR: Avoid adding isTesting or similar flags.

Problems 😔

Solutions 😃

  1. Remove behavior Ifs
  2. Use dependency injection
  3. Model external services (Don't mock them)
  4. Separate configurations
  5. Isolate test logic
  6. Maintain clean behavior boundaries

Refactorings ⚙️

https://hackernoon.com/refactoring-014-how-to-remove-if?embedable=true

Context 💬

When you add flags like isTesting, you mix testing and production code.

\ This creates hidden paths that are only active in tests.

\ Also, you don't cover real production code.

\ You risk shipping testing behavior to production, leading to bugs and unpredictable behavior.

Sample Code 📖

Wrong ❌

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);
    }
}

Detection 🔍

  • [x] Semi-Automatic

You can detect this smell by looking for conditional flags like isTesting, environment == 'test', DEBUG_MODE, and idioms like these.

\ These indicate that testing behavior is leaking into the production code.

Tags 🏷️

  • Testing

Level 🔋

  • [x] Intermediate

Why the Bijection Is Important 🗺️

You need a clear separation between test and production code.

\ When you mix them, you break the one-to-one Bijection between real-world behavior and the program.

\ Since environments are real-world entities you need to explicitly model them in the MAPPER.

AI Generation 🤖

AI-generated code often introduces this smell when you use quick hacks for testing.

\ Some tools suggest flags like isTesting because they prioritize ease over proper design.

AI Detection 🥃

AI tools can catch this smell if you configure them to flag conditional logic based on testing states.

Try Them! 🛠

Remember: AI Assistants make lots of mistakes

Suggested Prompt: Remove IsTesting method and replace it by modeling the environments

| Without Proper Instructions | With Specific Instructions | |----|----| | ChatGPT | ChatGPT | | Claude | Claude | | Perplexity | Perplexity | | Copilot | Copilot | | Gemini | Gemini | | DeepSeek | DeepSeek | | Meta AI | Meta AI | | Qwen | Qwen |

Conclusion 🏁

Avoid using isTesting flags.

\ Use dependency injection and model the environments to keep test and production logic separate.

Relations 👩‍❤️‍💋‍👨

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

https://hackernoon.com/code-smell-242-zombie-feature-flags?embedable=true

Disclaimer 📘

Code Smells are my opinion.

Credits 🙏

Photo by Christian Gertenbach on Unsplash


When you add testing flags, you undermine confidence in production.

Ward Cunningham

https://hackernoon.com/400-thought-provoking-software-engineering-quotes?embedable=true


This article is part of the CodeSmell Series.

https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-i-xqz3evd?embedable=true

\


This content originally appeared on HackerNoon and was authored by Maximiliano Contieri


Print Share Comment Cite Upload Translate Updates
APA

Maximiliano Contieri | Sciencx (2025-03-06T21:29:12+00:00) Code Smell 293 – You Should Avoid Adding isTesting or Similar Flags. Retrieved from https://www.scien.cx/2025/03/06/code-smell-293-you-should-avoid-adding-istesting-or-similar-flags/

MLA
" » Code Smell 293 – You Should Avoid Adding isTesting or Similar Flags." Maximiliano Contieri | Sciencx - Thursday March 6, 2025, https://www.scien.cx/2025/03/06/code-smell-293-you-should-avoid-adding-istesting-or-similar-flags/
HARVARD
Maximiliano Contieri | Sciencx Thursday March 6, 2025 » Code Smell 293 – You Should Avoid Adding isTesting or Similar Flags., viewed ,<https://www.scien.cx/2025/03/06/code-smell-293-you-should-avoid-adding-istesting-or-similar-flags/>
VANCOUVER
Maximiliano Contieri | Sciencx - » Code Smell 293 – You Should Avoid Adding isTesting or Similar Flags. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2025/03/06/code-smell-293-you-should-avoid-adding-istesting-or-similar-flags/
CHICAGO
" » Code Smell 293 – You Should Avoid Adding isTesting or Similar Flags." Maximiliano Contieri | Sciencx - Accessed . https://www.scien.cx/2025/03/06/code-smell-293-you-should-avoid-adding-istesting-or-similar-flags/
IEEE
" » Code Smell 293 – You Should Avoid Adding isTesting or Similar Flags." Maximiliano Contieri | Sciencx [Online]. Available: https://www.scien.cx/2025/03/06/code-smell-293-you-should-avoid-adding-istesting-or-similar-flags/. [Accessed: ]
rf:citation
» Code Smell 293 – You Should Avoid Adding isTesting or Similar Flags | Maximiliano Contieri | Sciencx | https://www.scien.cx/2025/03/06/code-smell-293-you-should-avoid-adding-istesting-or-similar-flags/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.