@MockBean și @SpyBean în Spring Boot Test în Spring Boot

test Spring Boot 3.x / Mockito Q&A / Distribuie cod

Înlocuirea componentelor din contextul Spring cu mock-uri Mockito pentru izolarea testelor de integrare de serviciile externe lente.

Sintaxă
@MockBean private PaymentService paymentService / when(...).thenReturn(...)

Când testezi un flux de business complex (de exemplu finalizarea unei comenzi), nu vrei ca testul tău să debiteze carduri reale prin Stripe sau să trimită mesaje SMS. Adnotarea @MockBean creează un mock Mockito și îl injectează direct în ApplicationContext, înlocuind orice bean real de acel tip.

Simetric, @SpyBean permite împachetarea unei instanțe reale existente într-un obiect spion (Spy), permițând urmărirea apelurilor și modificarea selectivă a comportamentului doar pentru anumite metode particulare.

Exemplu: Simulare răspuns serviciu de plăți cu @MockBean
package ro.dexblog.demo.service;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;

@SpringBootTest
class CheckoutServiceTest {

    @Autowired
    private CheckoutService checkoutService;

    @MockBean
    private StripeGateway stripeGateway;

    @Test
    void shouldCompleteCheckoutWhenPaymentSucceeds() {
        when(stripeGateway.charge(100.0)).thenReturn(true);

        boolean result = checkoutService.processCheckout("user_1", 100.0);
        assertTrue(result);
        verify(stripeGateway, times(1)).charge(100.0);
    }
}

Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: @MockBean și @SpyBean în Spring Boot Test

Ai o nelămurire despre utilizarea comenzii @MockBean și @SpyBean în Spring Boot Test sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.