Testing Mastery: JUnit, Mockito & Integration Tests · Lekcja

Wstrzykiwanie atrap za pomocą @Mock i @InjectMocks

Użyją Państwo adnotacji Mockito do podłączania zamockowanych zależności do testowanej klasy, ograniczając ilość powtarzalnego kodu konfiguracyjnego.

Lekcja 4 z 413 kroki

Wstrzykiwanie atrap za pomocą @Mock i @InjectMocks to bezpłatna lekcja Testing Mastery: JUnit, Mockito & Integration Tests na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Testing Mastery: JUnit, Mockito & Integration Tests, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Testing Mastery: JUnit, Mockito & Integration Tests zawiera 4 lekcji w sumie.

Części tej lekcji nie zostały jeszcze przetłumaczone i są wyświetlane po angielsku.

Why Annotations?

Creating mocks manually with mock(Type.class) works, but for classes with several dependencies it becomes repetitive. Mockito offers annotations that declare and wire mocks for you.

  • @Mock declares a mock field
  • @InjectMocks builds the real object and injects the mocks

The Class Under Test

Imagine an OrderService that depends on a PaymentGateway. We want to test the service while controlling the gateway.

class OrderService {
  private final PaymentGateway gateway;
  OrderService(PaymentGateway gateway) { this.gateway = gateway; }
  boolean checkout(double amount) {
    return gateway.charge(amount);
  }
}

Declaring a @Mock

Annotate a field with @Mock and Mockito creates a mock instance for it automatically once the annotations are processed.

@Mock
PaymentGateway gateway;

Using @InjectMocks

@InjectMocks tells Mockito to instantiate the target and inject any @Mock fields into it, via constructor, setter, or field injection.

@Mock PaymentGateway gateway;

@InjectMocks OrderService service;

Activating the Annotations

Annotations do nothing on their own. With JUnit 5 you enable them using @ExtendWith(MockitoExtension.class) on the test class.

@ExtendWith(MockitoExtension.class)
class OrderServiceTest {
  @Mock PaymentGateway gateway;
  @InjectMocks OrderService service;
}

The Older openMocks Approach

Without the extension you can call MockitoAnnotations.openMocks(this) in a @BeforeEach method. Prefer the extension when you can.

@BeforeEach
void setUp() {
  MockitoAnnotations.openMocks(this);
}

Writing the Test

Now stub the injected mock and exercise the service. The service already holds the mocked gateway, so no manual wiring is needed.

@Test
void checkoutSucceeds() {
  when(gateway.charge(100.0)).thenReturn(true);
  assertTrue(service.checkout(100.0));
}

Injection Strategies

Mockito tries injection in this order:

  • Constructor injection (preferred)
  • Setter injection
  • Field injection

Constructor injection is the safest because it works with final fields.

Multiple Dependencies

A class with several collaborators just gets several @Mock fields. Mockito matches each by type during injection.

@Mock PaymentGateway gateway;
@Mock InventoryRepo inventory;
@InjectMocks OrderService service;

When Injection Fails Silently

If a dependency cannot be matched, the field stays null rather than throwing. A NullPointerException at test time often means injection did not happen as expected. Verify types and constructor signatures.

Cleaner Tests

Annotations remove repetitive mock(...) and new Service(...) calls, keeping each test focused on behavior instead of wiring.

Quick Check

Which annotation builds the real object and injects mocks into it?

Recap

You learned to wire mocks declaratively:

  • @Mock declares a mock field
  • @InjectMocks builds the target and injects mocks
  • Enable with @ExtendWith(MockitoExtension.class)
  • Constructor injection is preferred and supports final fields
Bezpłatny start

Ucz się Testing Mastery: JUnit, Mockito & Integration Tests dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
12
Lekcje
48

Często zadawane pytania

Czy lekcja „Wstrzykiwanie atrap za pomocą @Mock i @InjectMocks” jest bezpłatna?

Tak — pełny tekst „Wstrzykiwanie atrap za pomocą @Mock i @InjectMocks” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Testing Mastery: JUnit, Mockito & Integration Tests, przejdź na CoddyKit PRO. Kurs Testing Mastery: JUnit, Mockito & Integration Tests zawiera 4 lekcji w sumie.

Co nauczysz się w „Wstrzykiwanie atrap za pomocą @Mock i @InjectMocks”?

Użyją Państwo adnotacji Mockito do podłączania zamockowanych zależności do testowanej klasy, ograniczając ilość powtarzalnego kodu konfiguracyjnego. Ćwiczysz Testing Mastery: JUnit, Mockito & Integration Tests z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Testing Mastery: JUnit, Mockito & Integration Tests?

Nie wymagamy żadnego doświadczenia. Testing Mastery: JUnit, Mockito & Integration Tests w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Wstrzykiwanie atrap za pomocą @Mock i @InjectMocks”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Testing Mastery: JUnit, Mockito & Integration Tests?

Tak. Każda lekcja Testing Mastery: JUnit, Mockito & Integration Tests zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Mocki, stuby i fake’i
  2. Tworzenie mocków za pomocą Mockito
  3. Weryfikowanie interakcji z mockami
  4. Wstrzykiwanie atrap za pomocą @Mock i @InjectMocks
← Powrót do Testing Mastery: JUnit, Mockito & Integration Tests