Tworzenie mocków za pomocą Mockito
Używaj Mockito do tworzenia mocków zależności, izolując testowaną jednostkę od współpracujących z nią komponentów.
Tworzenie mocków za pomocą Mockito to bezpłatna lekcja Testing Mastery: JUnit, Mockito & Integration Tests na CoddyKit. To lekcja 2 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.
Intro to Mockito Mocks
In the previous lesson, we learned about the concept of a mock object. Mocks are special test doubles that let us control the behavior of dependencies.
Now, we'll dive into Mockito, a popular Java mocking framework, to see how easy it is to create these powerful tools for your tests.
Why Create Mocks?
Creating mocks is crucial for effective unit testing:
- Isolation: Mocks allow you to test a single unit of code in isolation, without worrying about its real dependencies.
- Control: You can program mocks to behave exactly as needed for your test scenario, simulating various outcomes.
- Speed: Mocks avoid slow operations like database calls or network requests, making your tests run much faster.
The `Mockito.mock()` Method
The simplest way to create a mock object in Mockito is by using the Mockito.mock() static method. You pass it the Class or Interface you want to mock.
It returns a new mock instance that looks and acts like the real object, but without its actual implementation logic.
Basic Mock Creation Example
Let's create a mock for a simple EmailService interface. Run the code to see how a mock object is created.
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());
}
}Understanding Default Mock Behavior
What happens if you call a method on a mock without telling it what to do?
- Objects: Methods returning objects will return
null. - Primitives: Methods returning primitive types (like
int,boolean) will return their default values (0,false). - Collections: Methods returning collections will return empty collections.
- Void: Methods returning
voiddo nothing.
Default Behavior in Action
Let's call a method on our mockEmailService without any configuration. Observe the default return value.
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)");
}
}Creating Mocks with `@Mock`
While Mockito.mock() works, for tests, Mockito offers a more convenient way using the @Mock annotation.
You simply declare a field with @Mock, and Mockito takes care of initializing it into a mock object.
Initializing `@Mock` Annotations
For @Mock annotations to work, you need to tell Mockito to process them. In JUnit 5, this is typically done using the @ExtendWith(MockitoExtension.class) annotation on your test class.
Alternatively, you can manually initialize them using MockitoAnnotations.openMocks(this).
Example: Using `@Mock` Annotation
This example simulates a test class where @Mock is used. Run it to see the mock initialized 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());
}
}Quick Check on Mocks
You want to create a mock object for an interface called PaymentGateway. Which of the following is a correct and common way to do this in Mockito?
Recap: Creating Mocks
You've learned the fundamental ways to create mock objects with Mockito:
- Use
Mockito.mock(ClassToMock.class)for direct creation. - Use the
@Mockannotation on a field, typically initialized by@ExtendWith(MockitoExtension.class)in JUnit 5. - Mocks return default values (
null,0,false) for method calls if not configured otherwise.
Next, we'll learn how to verify that your mocks were called as expected!
Często zadawane pytania
Czy lekcja „Tworzenie mocków za pomocą Mockito” jest bezpłatna?
Tak — pełny tekst „Tworzenie mocków za pomocą Mockito” 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 „Tworzenie mocków za pomocą Mockito”?
Używaj Mockito do tworzenia mocków zależności, izolując testowaną jednostkę od współpracujących z nią komponentów. Ć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 2 z 4.
Ile czasu zajmuje lekcja „Tworzenie mocków za pomocą Mockito”?
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
- Mocki, stuby i fake’i
- Tworzenie mocków za pomocą Mockito
- Weryfikowanie interakcji z mockami
- Wstrzykiwanie atrap za pomocą @Mock i @InjectMocks