تتم الإشارة إلى الفئات المجردة على أنها الفئة المعلنة باستخدام الكلمة الأساسية المجردة التي قد تتضمن أو لا تتضمن الأساليب المجردة. في Java، لا يمكن إنشاء مثيل للفئات المجردة، ولكن يمكن تصنيفها فرعيًا. يمكن أن تحتوي أيضًا على حقول ثابتة وأساليب ثابتة.
بدائل watchcartoononline.io
سنناقش في هذا القسم السخرية أو التجسس على الطبقات المجردة. سنقوم بتحليل عدة حالات لاختبار الفئات المجردة باستخدام طرق غير مجردة.
للتجسس على الفئات المجردة أو الاستهزاء بها، نحتاج إلى إضافة تبعيات Maven التالية:
- JUnit
- موكيتو
- باور موك
جميع التبعيات المطلوبة للمشروع مذكورة أدناه:
junit junit 4.12 test org.mockito mockito-all 1.10.19 test org.powermock powermock-module-junit4 1.7.4 test org.powermock powermock-api-mockito 1.7.0 test
تبعيات PowerMock مطلوبة فقط للاختبار الذي نستخدم فيه PowerMock.
أمثلة على الطبقة المجردة الساخرة
1. التجسس على فئة مجردة باستخدام Mockito.spy ()
في هذا المثال، سنقوم بتجسس الفئات المجردة باستخدام طريقة Mockito.spy(). يتم استخدام أسلوب Mockito.spy() لإنشاء نسخة تجسس للفئة المجردة.
الخطوة 1: قم بإنشاء فئة مجردة تسمى Abstract1_class تحتوي على كل من الأساليب المجردة وغير المجردة.
Abstract1_class.java
public abstract class Abstract1_class { public abstract int newAbstractmethod(); public String methodUnderTest() { return 'one' ; } }
الخطوة 2: قم بإنشاء حالة اختبار JUnit باسم الملخص1Test . أنه يحتوي على مثيل تجسس للفئة المجردة.
Abstract1Test.java
import static org.junit.Assert.*; import org.junit.Test; import org.mockito.Mockito; import junit.framework.Assert; public class Abstract1Test { @Test public void testing_usingSpy() { Abstract1_class abstclas = Mockito.spy(Abstract1_class.class); String res = abstclas.methodUnderTest(); Assert.assertEquals('one', res); } }
انتاج |
يوضح الإخراج التالي أن الاختبار قيد التشغيل بنجاح.
عيب استخدام أسلوب Mockito.spy() هو أنه سيتم استدعاء مُنشئ الفئة المجردة أثناء إنشاء مثيل التجسس. في معظم الحالات، يستخدم المنشئ تبعيات خارجية يمكن أن تشكل عائقًا أمام عمليات تنفيذ اختبار الوحدة لدينا. تُعرف هذه التبعيات الخارجية عادةً باسم موانع الاختبار . هذا هو سبب استخدام طريقة Mockito.mock() للسخرية من الفئات المجردة.
2. السخرية من الفصل التجريدي باستخدام Mockito.mock()
في هذا المثال، سنقوم بمحاكاة الفئات المجردة باستخدام طريقة Mockito.mock().
عادة، يتم استخدام السخرية لإنشاء كائن مستنسخ أو وهمي للفئة. بمعنى آخر، يجعل الفصل خاليًا من منطقه أو خوارزمياته. لا يحتوي المثيل الوهمي الذي تم إنشاؤه على رمز (منطق) داخل الأساليب.
الخطوة 1: قم بإنشاء فئة مجردة تسمى Abstract_Class تحتوي على أساليب مجردة وغير مجردة.
Abstract_Class.java
public abstract class Abstract_Class { public String sayMock() { return 'Hii.. ' + getName() + symbol() ; } private String symbol() { return '!!'; } protected abstract String getName(); }
الخطوة 2: قم بإنشاء حالة اختبار JUnit باسم AbstractTestClass للسخرية من الطبقة المجردة.
AbstractTestClass.java
import static org.junit.Assert.*; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import org.junit.Test; public class AbstractTestClass { @Test public void test_AbstractClasses() { Abstract_Class ac = mock(Abstract_Class.class); when(ac.sayMock()).thenCallRealMethod(); when(ac.getName()).thenReturn('Jyotika'); assertEquals('Hii.. Jyotika!!', ac.sayMock()); } }
في الكود أعلاه، و هو مثيل تم إنشاؤه باستخدام طريقة Mockito.mock().
انتاج |
يوضح الإخراج التالي أن الاختبار يعمل بنجاح باستخدام Mockito.
النهج المذكور أعلاه ليس هو الأفضل، ولكن يمكن استخدامه. يوصى باستخدام الطريقة التالية لأنها تستخدم PowerMock ويمكنها التحكم في الأساليب الخاصة المحددة في الفئات المجردة.
3. السخرية من الفصل التجريدي باستخدام PowerMock
في المثال التالي، سوف نستخدم طريقة PowerMockito.mock() للسخرية من الفئات المجردة. يعد استخدام PowerMock بدلاً من Mockito.mock() أسلوبًا أفضل لأنه يمكن التحكم في الطرق الخاصة والثابتة.
الخطوة 1: قم بإنشاء فئة مجردة تسمى Abstract_class الذي يحتوي على أساليب مجردة وغير مجردة.
Abstract_class.java
public abstract class Abstract_Class { public abstract int myAbstractMethod(); public String sayMock() { return getName() + '13' ; } private String getName() { return 'Jyotika'; } }
الخطوة 2: قم بإنشاء حالة اختبار JUnit باسم AbstractTestClass لأغراض تجريبية.
AbstractTestClass.java
import static org.junit.Assert.*; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; @RunWith(PowerMockRunner.class) @PrepareForTest( Abstract_Class.class) public class AbstractTestClass { @Test public void test_AbstractClassesusing_PowerMock() throws Exception { // given Abstract_Class ac = PowerMockito.mock(Abstract_Class.class); PowerMockito.doCallRealMethod().when(ac).sayMock(); PowerMockito.doReturn('Sharma').when(ac , 'getName'); //when String newstring = ac.sayMock(); //then assertEquals('Sharma13', newstring); System.out.println(newstring); } }
انتاج |
يوضح الإخراج التالي أن الاختبار يعمل بنجاح باستخدام PowerMock مع Mockito.