إنشاء Mocks باستخدام Mockito
استخدم Mockito لإنشاء كائنات mock للتبعيات، مع عزل الوحدة قيد الاختبار عن الكائنات المتعاونة معها.
إنشاء Mocks باستخدام Mockito درس مجاني في Testing Mastery: JUnit, Mockito & Integration Tests على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Testing Mastery: JUnit, Mockito & Integration Tests، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Testing Mastery: JUnit, Mockito & Integration Tests 4 دروس في المجموع.
بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.
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!
الأسئلة الشائعة
هل درس «إنشاء Mocks باستخدام Mockito» مجاني؟
نعم — نص درس «إنشاء Mocks باستخدام Mockito» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Testing Mastery: JUnit, Mockito & Integration Tests، انتقل إلى CoddyKit PRO. تتضمن دورة Testing Mastery: JUnit, Mockito & Integration Tests 4 دروس في المجموع.
ماذا ستتعلم في «إنشاء Mocks باستخدام Mockito»؟
استخدم Mockito لإنشاء كائنات mock للتبعيات، مع عزل الوحدة قيد الاختبار عن الكائنات المتعاونة معها. تتمرن على Testing Mastery: JUnit, Mockito & Integration Tests مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Testing Mastery: JUnit, Mockito & Integration Tests؟
لا تُشترط خبرة سابقة. Testing Mastery: JUnit, Mockito & Integration Tests على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «إنشاء Mocks باستخدام Mockito»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Testing Mastery: JUnit, Mockito & Integration Tests هذا؟
نعم. كل درس في Testing Mastery: JUnit, Mockito & Integration Tests يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- Mocks وStubs وFakes
- إنشاء Mocks باستخدام Mockito
- التحقق من تفاعلات Mock
- حقن البدائل الوهمية باستخدام @Mock و@InjectMocks