🍰
Testing

Test Slices

@DataJpaTest, @JsonTest, @WebMvcTest
💡 Test Slices ek CAKE ke SLICES hain — POORA CAKE (POORI application) khaне (LOAD karne) ke bajaye, EK SPECIFIC SLICE (SIRF WEB LAYER, ya SIRF DATA LAYER) LIYA jaata hai — FASTER, FOCUSED, aur JITNA CHAHIYE utна HI LOAD hota hai.

Spring Boot MULTIPLE "TEST SLICE" annotations DETA hai — HAR EK, application ka EK SPECIFIC "SLICE" LOAD karta hai, POORA CONTEXT NAHI. @WebMvcTest (SIRF WEB LAYER — controllers, filters), @DataJpaTest (SIRF JPA — repositories, EntityManager, IN-MEMORY database AUTOMATICALLY), @JsonTest (SIRF JSON serialization).

Ye SLICES @SpringBootTest se BAHUT FASTER hain — POORA APPLICATION CONTEXT (SAB beans) LOAD NAHI karte, SIRF RELEVANT beans. LARGE applications mein, YE SPEED DIFFERENCE (SLICE vs FULL context) TEST SUITE ke RUN TIME mein DRAMATIC IMPACT DAALTA hai.

// @DataJpaTest — SIRF JPA layer, IN-MEMORY H2 automatically:
@DataJpaTest
class UserRepositoryTest {
    @Autowired
    private UserRepository repository;
    @Autowired
    private TestEntityManager entityManager;

    @Test
    void shouldFindByEmail() {
        entityManager.persist(new User("aarav@example.com"));
        Optional<User> found = repository.findByEmail("aarav@example.com");
        assertThat(found).isPresent();
    }
}

// @JsonTest — SIRF JSON serialization:
@JsonTest
class UserJsonTest {
    @Autowired
    private JacksonTester<User> json;

    @Test
    void shouldSerializeToJson() throws Exception {
        assertThat(json.write(new User("Aarav"))).hasJsonPathStringValue("$.name");
    }
}
🍰
Test Slices ek CAKE ke SLICES hain — POORA CAKE (POORI application) khaне (LOAD karne) ke bajaye, EK SPECIFIC SLICE (SIRF WEB LAYER, ya SIRF DATA LAYER) LIYA jaata hai — FASTER, FOCUSED, aur JITNA CHAHIYE utна HI LOAD hota hai.
1 / 2
⚡ Quick Recap
  • @WebMvcTest, @DataJpaTest, @JsonTest = FOCUSED, PARTIAL application context
  • @SpringBootTest se BAHUT FASTER — sirf RELEVANT beans LOAD hote hain
  • Test SLICE choice, KYA test ho raha hai, us par DEPEND karta hai
On this page (2 subtopics)

@DataJpaTest SIRF JPA-related beans LOAD karta hai (repositories, EntityManager) — SERVICE/CONTROLLER layer LOAD NAHI hote. DEFAULT mein, IN-MEMORY database (H2) AUTOMATICALLY use hoti hai (agar CLASSPATH par hai), REAL database TOUCH NAHI hoती.

@DataJpaTest
class UserRepositoryTest {
    @Autowired
    private UserRepository repository;

    @Test
    void shouldFindByEmail() {
        repository.save(new User("test@example.com"));
        assertThat(repository.findByEmail("test@example.com")).isPresent();
    }
}

@JsonTest SIRF JSON serialization/deserialization RELATED beans LOAD karta hai (Jackson ObjectMapper) — TEST karta hai ki JAVA OBJECT, EXPECTED JSON format mein CONVERT hota hai (ya VICE VERSA), bina POORI application load kiye.

@JsonTest
class UserJsonTest {
    @Autowired
    private JacksonTester<User> json;

    @Test
    void shouldSerialize() throws Exception {
        User user = new User("Aarav", "aarav@example.com");
        assertThat(json.write(user)).hasJsonPathStringValue("$.name");
    }
}