🎯
Testing

Test-Specific Configuration

@TestConfiguration, Context Caching
💡 @TestConfiguration ek "STUNT DOUBLE SET" hai — REAL SET (production configuration) ko MODIFY kiye BINA, TESTING ke liye EK SEPARATE, PARALLEL SET (test-only beans) BANAYA jaata hai, jisme RISKY/EXPENSIVE cheezein (real payment gateway) FAKE VERSIONS SE REPLACE ho jaati hain.

@TestConfiguration ek SEPARATE @Configuration CLASS DEFINE karne deता hai JO SIRF TESTS mein ACTIVE hoती hai — MAIN application configuration ko IMPACT kiye BINA. COMMON USE-CASE: EXTERNAL SERVICES (payment gateways, email providers) ke MOCK/FAKE VERSIONS PROVIDE karna, taaki TESTS REAL, EXTERNAL systems ko HIT NA karein.

SPRING TEST FRAMEWORK ek IMPORTANT OPTIMIZATION bhi karta hai — APPLICATION CONTEXT CACHING. AGAR MULTIPLE test classes SAME configuration use karte hain, Spring context EK BAAR CREATE hota hai, aur SAARI TEST CLASSES ke BEECH REUSE hota hai — TEST SUITE ki SPEED SIGNIFICANTLY IMPROVE hoती hai.

@TestConfiguration
public class TestConfig {
    @Bean
    @Primary
    public PaymentGateway mockPaymentGateway() {
        return new FakePaymentGateway();   // REAL Stripe API kabhi CALL NAHI hoगा
    }
}

@SpringBootTest
@Import(TestConfig.class)
class OrderServiceIntegrationTest {
    @Autowired
    private PaymentGateway paymentGateway;   // FakePaymentGateway inject hoगi

    @Test
    void shouldPlaceOrderWithoutRealPayment() {
        // Test REAL payment provider ko KABHI TOUCH NAHI karता
    }
}
🎯
@TestConfiguration ek "STUNT DOUBLE SET" hai — REAL SET (production configuration) ko MODIFY kiye BINA, TESTING ke liye EK SEPARATE, PARALLEL SET (test-only beans) BANAYA jaata hai, jisme RISKY/EXPENSIVE cheezein (real payment gateway) FAKE VERSIONS SE REPLACE ho jaati hain.
1 / 2
⚡ Quick Recap
  • @TestConfiguration = test-only beans (mocks, fakes) — real config IMPACT nahi
  • Common use-case: external services (payment, email) ke FAKE versions
  • Context caching = SAME config, MULTIPLE test classes ke beech REUSE, FASTER suite
Is page mein (2 subtopics)

@TestConfiguration se, EK SEPARATE CONFIGURATION CLASS DEFINE ki ja sakti hai JO SIRF TESTS mein USE hoती hai (jaise EK MOCK EXTERNAL API CLIENT) — MAIN application CONFIGURATION ko IMPACT kiye BINA.

@TestConfiguration
public class TestConfig {
    @Bean
    @Primary
    public PaymentGateway mockPaymentGateway() {
        return new FakePaymentGateway();   // REAL Stripe API NAHI CALL hoगा tests mein
    }
}

Spring Test FRAMEWORK, APPLICATION CONTEXT ko CACHE karta hai TEST CLASSES ke BEECH — AGAR MULTIPLE test classes, SAME configuration use karte hain, Spring context EK BAAR hi CREATE hota hai, REUSE hota hai — TEST SUITE ki SPEED SIGNIFICANTLY IMPROVE hoती hai.

⚠️Common Mistake: @DirtiesContext annotation, CACHE ko INVALIDATE kar deta hai (agar TEST NE context ko MODIFY kiya hai) — OVERUSE karne se TEST SUITE SLOW ho jaati hai, kyunki HAR BAAR NAYA context CREATE hota hai.