Membuat Mock dengan Mockito
Gunakan Mockito untuk membuat objek mock bagi dependensi dan mengisolasi unit yang diuji dari kolaboratornya.
Membuat Mock dengan Mockito adalah pelajaran Testing Mastery: JUnit, Mockito & Integration Tests gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Testing Mastery: JUnit, Mockito & Integration Tests, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Testing Mastery: JUnit, Mockito & Integration Tests mencakup 4 pelajaran total.
Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.
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!
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Membuat Mock dengan Mockito” gratis?
Ya — teks lengkap “Membuat Mock dengan Mockito” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Testing Mastery: JUnit, Mockito & Integration Tests, upgrade ke CoddyKit PRO. Kursus Testing Mastery: JUnit, Mockito & Integration Tests mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Membuat Mock dengan Mockito”?
Gunakan Mockito untuk membuat objek mock bagi dependensi dan mengisolasi unit yang diuji dari kolaboratornya. Kamu berlatih Testing Mastery: JUnit, Mockito & Integration Tests dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Testing Mastery: JUnit, Mockito & Integration Tests?
Tidak diperlukan pengalaman sebelumnya. Testing Mastery: JUnit, Mockito & Integration Tests di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Membuat Mock dengan Mockito” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Testing Mastery: JUnit, Mockito & Integration Tests ini?
Ya. Setiap pelajaran Testing Mastery: JUnit, Mockito & Integration Tests menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mock, Stub, dan Fake
- Membuat Mock dengan Mockito
- Memverifikasi Interaksi Mock
- Menyuntikkan Mock dengan @Mock dan @InjectMocks