Oprettelse af mocks med Mockito
Brug Mockito til at oprette mock-objekter for afhængigheder, så enheden under test isoleres fra sine samarbejdspartnere.
Oprettelse af mocks med Mockito er en gratis Mestrer test: JUnit, Mockito og integrationstest-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Mestrer test: JUnit, Mockito og integrationstest, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Mestrer test: JUnit, Mockito og integrationstest-kurset indeholder 4 lektioner i alt.
Introduktion til Mockito-mocks
I den forrige lektion lærte du om begrebet et mock-objekt. Mocks er særlige testdoubler, der giver dig mulighed for at styre afhængighedernes adfærd.
Nu går vi i dybden med Mockito, et populært Java-framework til mocking, så du kan se, hvor nemt det er at oprette disse effektive værktøjer til dine tests.
Hvorfor oprette mocks?
Det er afgørende at oprette mocks for at kunne skrive effektive enhedstests:
- Isolation: Mocks giver dig mulighed for at teste en enkelt kodenhed isoleret uden at bekymre dig om dens faktiske afhængigheder.
- Kontrol: Du kan programmere mocks til at opføre sig præcis som nødvendigt i dit testscenarie og simulere forskellige resultater.
- Hastighed: Mocks undgår langsomme handlinger som databasekald eller netværksforespørgsler, så dine tests kører meget hurtigere.
Metoden `Mockito.mock()`
Den enkleste måde at oprette et mock-objekt på i Mockito er at bruge den statiske metode Mockito.mock(). Du angiver den Class eller Interface, du vil oprette et mock af.
Metoden returnerer en ny mock-instans, der ser ud og opfører sig som det rigtige objekt, men uden dets faktiske implementeringslogik.
Eksempel på grundlæggende oprettelse af et mock
Lad os oprette et mock af den enkle grænseflade EmailService. Kør koden for at se, hvordan et mock-objekt oprettes.
import org.mockito.Mockito;
interface EmailService {
void sendEmail(String to, String subject, String body);
String getServiceStatus();
}
public class Main {
public static void main(String[] args) {
EmailService mockEmailService = Mockito.mock(EmailService.class);
System.out.println("Mock created: " + mockEmailService.getClass().getName());
}
}Forstå mocks' standardadfærd
Hvad sker der, hvis du kalder en metode på et mock uden at angive, hvad den skal gøre?
- Objekter: Metoder, der returnerer objekter, returnerer
null. - Primitive typer: Metoder, der returnerer primitive typer som
intogboolean, returnerer deres standardværdier (0ogfalse). - Samlinger: Metoder, der returnerer samlinger, returnerer tomme samlinger.
- Void: Metoder, der returnerer
void, gør ingenting.
Standardadfærd i praksis
Lad os kalde en metode på vores mockEmailService uden nogen konfiguration. Observer standardreturværdien.
import org.mockito.Mockito;
interface EmailService {
void sendEmail(String to, String subject, String body);
String getServiceStatus();
}
public class Main {
public static void main(String[] args) {
EmailService mockEmailService = Mockito.mock(EmailService.class);
// Calling a method that returns an object
String status = mockEmailService.getServiceStatus();
System.out.println("Default status: " + status);
// Calling a void method (does nothing by default)
mockEmailService.sendEmail("test@example.com", "Hi", "Hello");
System.out.println("Void method called (no output)");
}
}Oprettelse af mocks med `@Mock`
Selvom Mockito.mock() fungerer, tilbyder Mockito en mere praktisk metode til tests ved hjælp af annotationen @Mock.
Du skal blot erklære et felt med @Mock, så sørger Mockito for at initialisere det som et mock-objekt.
Initialisering af `@Mock`-annoteringer
For at @Mock-annoteringer kan fungere, skal du fortælle Mockito, at de skal behandles. I JUnit 5 gøres dette typisk ved at bruge annotationen @ExtendWith(MockitoExtension.class) på din testklasse.
Alternativt kan du initialisere dem manuelt ved hjælp af MockitoAnnotations.openMocks(this).
Eksempel: Brug af annotationen `@Mock`
Dette eksempel simulerer en testklasse, hvor @Mock bruges. Kør det for at se mocken blive initialiseret via MockitoAnnotations.openMocks().
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
interface DataRepository {
String fetchData();
}
// Simulate a test class structure
class MyServiceTest {
@Mock
DataRepository mockRepository;
public MyServiceTest() {
// Manually open mocks for demonstration in main
MockitoAnnotations.openMocks(this);
}
}
public class Main {
public static void main(String[] args) {
MyServiceTest testInstance = new MyServiceTest();
System.out.println("Mocked repository: " + testInstance.mockRepository.getClass().getName());
System.out.println("Default fetch data: " + testInstance.mockRepository.fetchData());
}
}Hurtigt tjek af mocks
Du vil oprette et mock-objekt for en grænseflade kaldet PaymentGateway. Hvilken af følgende muligheder er en korrekt og almindelig måde at gøre dette på i Mockito?
Opsummering: Oprettelse af mocks
Du har lært de grundlæggende måder at oprette mock-objekter på med Mockito:
- Brug
Mockito.mock(ClassToMock.class)til direkte oprettelse. - Brug annotationen
@Mockpå et felt, som typisk initialiseres af@ExtendWith(MockitoExtension.class)i JUnit 5. - Mocks returnerer standardværdier (
null,0,false) for metodekald, hvis andet ikke er konfigureret.
Nu skal du lære, hvordan du kan kontrollere, at dine mocks blev kaldt som forventet!
Lær Mestrer test: JUnit, Mockito og integrationstest med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 12
- Lektioner
- 48
Ofte stillede spørgsmål
Er lektionen “Oprettelse af mocks med Mockito” gratis?
Ja — alle 3 lektioner i læringssporet Mestrer test: JUnit, Mockito og integrationstest, inklusive “Oprettelse af mocks med Mockito”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Mestrer test: JUnit, Mockito og integrationstest-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Oprettelse af mocks med Mockito”?
Brug Mockito til at oprette mock-objekter for afhængigheder, så enheden under test isoleres fra sine samarbejdspartnere. Du øver dig i Mestrer test: JUnit, Mockito og integrationstest med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Mestrer test: JUnit, Mockito og integrationstest?
Der kræves ingen tidligere erfaring. Mestrer test: JUnit, Mockito og integrationstest på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “Oprettelse af mocks med Mockito”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Mestrer test: JUnit, Mockito og integrationstest-lektion?
Ja. Alle Mestrer test: JUnit, Mockito og integrationstest-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Mocks, stubs og fakes
- Oprettelse af mocks med Mockito
- Verificering af mock-interaktioner
- Injektion af mocks med @Mock og @InjectMocks