0Pricing
Java Academy · Ders

Spring Boot Test Dilimleri: @WebMvcTest ve @DataJpaTest

Denetleyicileri yalıtılmış olarak sınamak için @WebMvcTest'i, depo katmanını sınamak için @DataJpaTest'i kullanın.

Spring Boot Test Dilimleri: @WebMvcTest ve @DataJpaTest, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.

Sınama Dilimleri Nedir?

Sınama dilimleri, belirli bir katman için Spring bağlamının yalnızca ilgili bölümünü yükler. Her şeyi yükleyen @SpringBootTest ek açıklamasından daha hızlıdır ve sınanan katmanı yalıtır.

@WebMvcTest: Yalnızca Denetleyici Katmanı

@WebMvcTest(UserController.class) yalnızca web katmanını yükler: denetleyiciler, filtreler, güvenlik yapılandırması ve Jackson. Hizmetler ile veri depoları @MockBean ile taklit edilmelidir.

@WebMvcTest(UserController.class)
class UserControllerTest {
    @Autowired MockMvc mockMvc;
    @MockBean UserService userService;
    @Test
    void get_user_returns_200() throws Exception {
        given(userService.findById(1L)).willReturn(new UserDto(1L, "Alice"));
        mockMvc.perform(get("/api/users/1"))
            .andExpect(status().isOk())
            .andExpect(jsonPath("$.name").value("Alice"));
    }
}

MockMvc İsteği Oluşturma

İstekleri MockMvcRequestBuilders ile oluşturun. POST/PUT sınamaları için üst bilgileri, içerik türünü ve istek gövdesini ayarlayın.

mockMvc.perform(post("/api/users")
        .contentType(MediaType.APPLICATION_JSON)
        .content("""{"name":"Bob","email":"bob@example.com"}"""))
    .andExpect(status().isCreated())
    .andExpect(header().exists("Location"));

@WebMvcTest içinde Doğrulamayı Sınama

Geçersiz istek gövdeleri MethodArgumentNotValidException oluşturur. 400 durumunu ve hata yanıtının gövdesini doğrulayın.

mockMvc.perform(post("/api/users")
        .contentType(MediaType.APPLICATION_JSON)
        .content("""{"name":"","email":"bad"}"""))
    .andExpect(status().isBadRequest())
    .andExpect(jsonPath("$.errors.name").exists());

@DataJpaTest: Yalnızca Veri Deposu Katmanı

@DataJpaTest, JPA veri depolarını, gömülü H2 veritabanını, Hibernate'i ve bir TestEntityManager yükler. Diğer bileşenler (hizmetler ve web) yüklenmez.

@DataJpaTest
class UserRepositoryTest {
    @Autowired UserRepository repo;
    @Autowired TestEntityManager em;
    @Test
    void find_by_email() {
        em.persist(new User("Alice", "alice@example.com"));
        em.flush();
        Optional<User> found = repo.findByEmail("alice@example.com");
        assertTrue(found.isPresent());
    }
}

TestEntityManager

TestEntityManager, EntityManager sınıfını şu kolaylık yöntemleriyle sarar: persist(), flush(), find(), persistAndFlush().

User saved = em.persistAndFlush(new User("Bob", "bob@example.com"));
assertNotNull(saved.getId());
em.clear(); // detach all to force a real DB read
User fromDb = repo.findById(saved.getId()).orElseThrow();
assertEquals("Bob", fromDb.getName());

@DataJpaTest Geri Alma

Her sınama, varsayılan olarak sınama tamamlandıktan sonra geri alınan bir işlem içinde çalışır. Veriler sınamalar arasında kalıcı olmaz; böylece elle temizleme yapmadan sınama yalıtımı sağlanır.

@DataJpaTest  // each @Test is rolled back automatically
class OrderRepositoryTest {
    @Test @Transactional
    void count_orders_is_zero_by_default() {
        assertEquals(0, orderRepo.count());
    }
}

@DataJpaTest içinde H2'yi Gerçek Veritabanıyla Değiştirme

@DataJpaTest çalıştırılırken H2 yerine application.properties içinde yapılandırılmış gerçek veritabanını kullanmak için @AutoConfigureTestDatabase(replace = Replace.NONE) kullanın.

@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
class ProductRepositoryTest {
    // Uses the configured PostgreSQL, not H2
}

@JsonTest: Yalnızca JSON Serileştirme

@JsonTest, Jackson yapılandırmasını yükler. Nesnelerin beklendiği gibi serileştirilip seri durumdan çıkarıldığını doğrulamak için JacksonTester kullanın.

@JsonTest
class UserDtoJsonTest {
    @Autowired JacksonTester<UserDto> json;
    @Test
    void serializes_correctly() throws Exception {
        UserDto dto = new UserDto(1L, "Alice", "alice@example.com");
        assertThat(json.write(dto)).hasJsonPathStringValue("$.email");
    }
}

@RestClientTest: REST İstemcisi Katmanı

@RestClientTest, RestTemplate veya WebClient tabanlı HTTP istemcilerini sınar. HTTP yanıtlarını taklit etmek için bir MockRestServiceServer yapılandırır.

@RestClientTest(WeatherClient.class)
class WeatherClientTest {
    @Autowired WeatherClient client;
    @Autowired MockRestServiceServer server;
    @Test
    void fetches_weather() {
        server.expect(requestTo("/api/weather")).andRespond(withSuccess("""{"temp":22}""", APPLICATION_JSON));
        Weather w = client.getWeather("Istanbul");
        assertEquals(22, w.getTemp());
    }
}

Dilimleri @Import ile Birleştirme

Dilimler, tasarım gereği birçok bileşeni dışarıda bırakır. Dilimin ihtiyaç duyduğu belirli yapılandırma sınıflarını eklemek için @Import(SomeConfig.class) kullanın.

@WebMvcTest(UserController.class)
@Import(SecurityConfig.class)  // load security for auth tests
class SecuredControllerTest { ... }

Kısa Kontrol

@DataJpaTest varsayılan olarak hangi veritabanını kullanır?

Özet

@WebMvcTest, denetleyici katmanını MockMvc ile sınar; hizmetleri @MockBean ile taklit edin. @DataJpaTest, veri depolarını TestEntityManager ile sınar ve otomatik geri alma yapar. Gerçek veritabanı için Replace.NONE kullanın. Serileştirme için @JsonTest, HTTP istemcileri için @RestClientTest kullanın.

Sıkça Sorulan Sorular

“Spring Boot Test Dilimleri: @WebMvcTest ve @DataJpaTest” dersi ücretsiz mi?

Evet — “Spring Boot Test Dilimleri: @WebMvcTest ve @DataJpaTest” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.

“Spring Boot Test Dilimleri: @WebMvcTest ve @DataJpaTest” dersinde ne öğreneceğim?

Denetleyicileri yalıtılmış olarak sınamak için @WebMvcTest'i, depo katmanını sınamak için @DataJpaTest'i kullanın. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Java Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Spring Boot Test Dilimleri: @WebMvcTest ve @DataJpaTest” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. @CsvSource ve @MethodSource ile Parametreli Testler
  2. Mockito İleri Düzey: Bağımsız Değişken Yakalayıcıları ve Casuslar
  3. Spring Boot Test Dilimleri: @WebMvcTest ve @DataJpaTest
  4. Testcontainers: Gerçek Veritabanı Tümleştirme Testleri
← Java Academy Sayfasına Dön