البرمجة

تحسين تحقق الاستدعاءات في Mockito

في الكود الذي قدمته، يتم استخدام مكتبة Mockito في اختبارات الوحدة للتحقق من سلوك الكائنات المزيفة. الهدف من هذا الكود هو التحقق من استدعاء الطريقة doIt على كائن مزيف من الفئة TestMock باستخدام Mockito.

تتوقع أن يتم طباعة القيم “1 2” بسبب الاستخدام المتكرر لمرة واحدة على الأقل (atLeastOnce())، ولكن الناتج الفعلي يظهر “2 2”. يبدو أن الاستدعاء الأول “1” تم فقدانه.

السبب في هذا السلوك يعود إلى الطريقة التي تستخدم بها ArgumentCaptor في التحقق. عند استخدام verify(mock, atLeastOnce()).doIt(argument.capture()) مرتين، يتم التقاط القيمة مرتين أيضًا. وعند استدعاء argument.getValue() في نهاية اليوم، سيتم الرجوع إلى القيمة الأخيرة التي تم التقاطها.

لتصحيح هذا السلوك وضمان تسجيل الاستدعاءات بشكل منفصل، يمكنك استخدام ArgumentCaptor.getAllValues() للوصول إلى جميع القيم التي تم التقاطها. يمكنك تعديل الكود كما يلي:

java
import java.util.List; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.verify; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; public class MockitoTest { public static class TestMock { public void doIt(String s) { } } public static void main(String[] args) { TestMock mock = Mockito.mock(TestMock.class); mock.doIt("1"); mock.doIt("2"); ArgumentCaptor argument = ArgumentCaptor.forClass(String.class); verify(mock, atLeastOnce()).doIt(argument.capture()); List allValues = argument.getAllValues(); for (String value : allValues) { System.out.println(value); } } }

باستخدام argument.getAllValues()، يمكنك ضمان تسجيل جميع القيم التي تم التقاطها، وبالتالي، يجب أن يظهر الإخراج المتوقع “1 2”.

المزيد من المعلومات

في هذا السياق، يعد Mockito إطار اختبار يُستخدم بشكل رئيسي في تطوير البرمجيات باستخدام لغة البرمجة جافا. يتيح Mockito للمطورين إنشاء كائنات مزيفة (mock objects) لاختبار سلوك وحدات البرنامج بشكل فعال. الهدف الرئيسي هو تحقيق اختبارات وحدية (Unit Tests) قوية ومستقلة.

في الكود الذي قدمته، تم إنشاء كائن مزيف من الفئة TestMock باستخدام Mockito.mock(TestMock.class)، وتم استخدام ArgumentCaptor لالتقاط القيم الممررة إلى الدالة doIt. يتم ذلك باستخدام verify(mock, atLeastOnce()).doIt(argument.capture()) حيث يضمن atLeastOnce() أن الدالة تم استدعاؤها على الأقل مرة واحدة.

ومع ذلك، كانت هناك مشكلة في استخدام argument.getValue() مرتين، حيث أنها ترجع دائمًا إلى القيمة الأخيرة الملتقطة. لتجاوز هذه المشكلة، تم استخدام argument.getAllValues() للحصول على قائمة بجميع القيم التي تم التقاطها.

في النهاية، يُظهر الكود الناتج “1 2” بشكل صحيح، وذلك بعد تصحيح السلوك غير المتوقع. يُشير هذا إلى أهمية فهم تفاصيل الأدوات والمكتبات التي يتم استخدامها في مشروع البرمجة لضمان كفاءة الاختبارات وصحة السلوك المتوقع.

مقالات ذات صلة

زر الذهاب إلى الأعلى

المحتوى محمي من النسخ !!