اذهب إلى المحتوى

السؤال

نشر

كيف يمكنني فحص الميثودات التي وظيفتها جلب وتعديل الداتا من والى الفايربيس؟ جربت الـ Mockito لكن للاسف لم افهمه جيدا فلم استطع العمل به. 

اتمنى ممن عنده علم الاجابه، شاكره لكم 

 

مثلا: 


} public void fetchPhoneNumber(final PhoneFetchListener listener)

;()fAuth = FirebaseAuth.getInstance

DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference() .child("customer") .child(fAuth.getCurrentUser().getUid()) .child("phone");     databaseReference.addListenerForSingleValueEvent(new ValueEventListener(){x

}

@Override

}public void onDataChange(DataSnapshot dataSnapshot)

;String phone = dataSnapshot.getValue(String.class); setPhone(phone)

;listener.onPhoneFetched(phone)

}

 @Override

}public void onCancelled(DatabaseError databaseError) 

;Log.e("fetchPhoneNumber", "Error fetching phone number: " + databaseError.getMessage())

{

}); }

public interface PhoneFetchListener { void onPhoneFetched(String phone); }

 

Recommended Posts

  • 0
نشر

ستحتاجين إلى استخدام إطار العمل JUnit الخاص بإختبارات الوحدة وهو الأكثر استخدامًا بخصوص جافا.

أيضًا استخدام Mockito وهي إطار عمل لتنفيذ Mocking وتساعدك على اختبار الكود الذي يعتمد على كائنات أخرى، بمعنى إنشاء كائنات مزيفة mock objects في اختبارات الوحدة، وذلك إختياري لتحسين اختبارات الوحدة التي تقومين بها.

لنقم بإضافة إطار العمل JUnit بإضافة التبعية التالية في ملف build.gradle:

dependencies {
    testImplementation 'junit:junit:4.13.2'
}

ثم إنشاء فئة جديدة في  src/test/java بامتداد .java. وتلك الفئة ستحتوي على اختبارات الوحدة.

ثم كتابة اختبارات الوحدة باستخدام إطار العمل JUnit وسيبدوا كالتالي بدون Mockito:

import org.junit.Before;
import org.junit.Test;

public class ExampleTest {
    private ExampleClass exampleClass;

    @Before
    public void setup() {
        exampleClass = new ExampleClass();
    }

    @Test
    public void testExampleMethod() {
        // كتابة اختبار الوحدة هنا
        assertEquals("النتيجة المتوقعة", exampleClass.exampleMethod());
    }
}

ثم تشغيل الاختبارات باستخدام Android Studio، وتستطيعي تشغيل الاختبارات الفردية أو جميع الاختبارات في الفئة.

الآن عليكِ تمكين مكتبة Mockito في مشروعك عن طريق إضافة التبعية التالية في ملف build.gradle:

dependencies {
    testImplementation 'org.mockito:mockito-core:4.0.0'
}

ثم إنشاء كائنات مزيفة باستخدام مكتبة Mockito أي نقوم بالكتابة في نفس ملف إختبار الوحدة، ليصبح بالشكل التالي:

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;

import static org.junit.Assert.assertEquals;

public class MyActivityTest {

    @RunWith(MockitoJUnitRunner.class)
    public class MyActivityTest {

        @Test
        public void testCalculateSum() {
            MyActivity myActivity = new MyActivity();
            int result = myActivity.calculateSum(2, 3);
            assertEquals(5, result);
        }

        @Test
        public void testCalculateSumWithMock() {
            MyDependency dependency = Mockito.mock(MyDependency.class);
            Mockito.when(dependency.getValue()).thenReturn(5);
            MyActivity myActivity = new MyActivity(dependency);
            int result = myActivity.calculateSumWithDependency();
            assertEquals(10, result);
            Mockito.verify(dependency, Mockito.times(1)).getValue();
        }
    }
}

لاحظي:

  • @Test لإضافة اختبارات جديدة وهو خاص بـ Junit
  • Mockito.mock() لإنشاء كائنات mock objects.
  • Mockito.when() لإرجاع قيم محددة من  mock objects.
  •  Mockito.verify() للتأكد من استدعاء الطرق المطلوبة.
  • استخدم assertEquals() للتأكد من أن النتيجة تساوي القيمة المتوقعة.

بعد ذلك تشغيل الاختبارات باستخدام Android Studio.

والإختبار هنا من أجل التأكد هل تُرجع دالة calculateSumWithDependency القيمة الصحيحة عندما تُرجع دالة getValue() في الكائن المزيف القيمة 5؟

وهل تُستدعى دالة getValue() في الكائن المزيف مرة واحدة فقط؟

وبالطبع لا يجب كتابة اسم الكلاس بالضرورة MyActivityTest، بإمكانك اختيار أي اسم تريدينه، لكن من المهم أن يكون اسمًا وصفيًا يعكس وظيفة الكلاس، أي مثلاً تسميته MyActivityCalculatorTest أو MyActivityDependencyTest لإبراز ما يتم اختباره.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...