Testing Mastery: JUnit, Mockito & Integration Tests · Lezione

Lanciare eccezioni e gestire chiamate consecutive

Configuri gli stub dei mock affinché lancino eccezioni e restituiscano valori diversi in invocazioni consecutive, per scenari di test più articolati.

Lezione 4 di 413 passaggi

Lanciare eccezioni e gestire chiamate consecutive è una lezione Testing Mastery: JUnit, Mockito & Integration Tests gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Testing Mastery: JUnit, Mockito & Integration Tests, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Testing Mastery: JUnit, Mockito & Integration Tests include 4 lezioni in totale.

Parti di questa lezione non sono ancora state tradotte e vengono mostrate in inglese.

Beyond Simple Returns

Stubbing return values covers the happy path, but real code must also handle errors and changing state. Mockito lets you stub mocks to throw exceptions and to vary their answers per call.

thenThrow Basics

Use thenThrow to make a stubbed method raise an exception, so you can test your error handling.

when(repo.findById(99L))
    .thenThrow(new NotFoundException());

Testing the Failure Path

Combine the throwing stub with assertThrows to verify your code reacts correctly.

@Test
void propagatesError() {
  when(repo.findById(99L)).thenThrow(new NotFoundException());
  assertThrows(NotFoundException.class,
      () -> service.load(99L));
}

Throwing from void Methods

For void methods you cannot use when(...) directly. Use doThrow(...).when(mock).method() instead.

doThrow(new IllegalStateException())
    .when(logger).flush();

Consecutive Return Values

Pass multiple arguments to thenReturn to return different values on successive calls. The last value repeats once exhausted.

when(counter.next())
    .thenReturn(1, 2, 3);

Chaining Stub Calls

You can also chain calls. Each call describes the next invocation in order.

when(counter.next())
    .thenReturn(1)
    .thenReturn(2)
    .thenThrow(new IllegalStateException());

Mixing Returns and Throws

A common pattern: succeed a few times, then fail. This models flaky resources like a retrying network client.

when(client.fetch())
    .thenReturn("ok")
    .thenThrow(new IOException("down"));

Checked Exceptions Caveat

A mock can only throw a checked exception that the stubbed method declares. Throwing an undeclared checked exception causes a runtime error from Mockito.

doReturn for Consecutive Values

The do* family also supports chaining and is required when stubbing spies or void methods.

doReturn("a")
    .doReturn("b")
    .when(provider).value();

Why This Matters

Exception and consecutive stubbing let you exercise retry logic, fallback paths, and stateful sequences without building complex fake objects.

Putting It Together

You can now drive a mock through a full sequence of success and failure to validate resilient code.

when(api.call())
    .thenReturn("first")
    .thenThrow(new TimeoutException());

Quick Check

How do you make a stubbed method return 1, then 2 on its second call?

Recap

You learned advanced stubbing:

  • thenThrow / doThrow simulate errors
  • Multiple thenReturn args or chains give consecutive values
  • Mocks can only throw declared checked exceptions
  • Use do* for void methods and spies
Gratis per iniziare

Impara Testing Mastery: JUnit, Mockito & Integration Tests con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
12
Lezioni
48

Domande Frequenti

La lezione «Lanciare eccezioni e gestire chiamate consecutive» è gratuita?

Sì — il testo completo di «Lanciare eccezioni e gestire chiamate consecutive» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Testing Mastery: JUnit, Mockito & Integration Tests, passa a CoddyKit PRO. Il corso Testing Mastery: JUnit, Mockito & Integration Tests include 4 lezioni in totale.

Cosa imparerò in «Lanciare eccezioni e gestire chiamate consecutive»?

Configuri gli stub dei mock affinché lancino eccezioni e restituiscano valori diversi in invocazioni consecutive, per scenari di test più articolati. Eserciti Testing Mastery: JUnit, Mockito & Integration Tests con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Testing Mastery: JUnit, Mockito & Integration Tests?

Non è richiesta alcuna esperienza precedente. Testing Mastery: JUnit, Mockito & Integration Tests su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Lanciare eccezioni e gestire chiamate consecutive»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Testing Mastery: JUnit, Mockito & Integration Tests?

Sì. Ogni lezione Testing Mastery: JUnit, Mockito & Integration Tests include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Configurare i valori restituiti
  2. Matcher degli argomenti di Mockito
  3. Spiare oggetti reali
  4. Lanciare eccezioni e gestire chiamate consecutive
← Torna a Testing Mastery: JUnit, Mockito & Integration Tests