جافا مشكلة - الحصول على الأخطاء المتعلقة Mockito

StackOverflow https://stackoverflow.com/questions/1749528

  •  20-09-2019
  •  | 
  •  

سؤال

وأنا باستخدام مكتبة Mockito لجاوا اختبار والحصول على أخطاء في Mockito عند تشغيل اختباري. (أنا باستخدام NetBeans بيئة تطوير متكاملة، في حالة أن يخصهم). على سبيل المثال، لدي فئة تسمى الحيوانية وأنا أحاول أن إجراء اختبار بسيط التالية:

@Test
public void mokito_test(){

    Animal mockAnimal = mock(Animal.class);
    Animal testAnimal2 = mockAnimal;

    assertTrue(mockAnimal.equals(testAnimal2));

}

وهذا الاختبار يعطي الخطأ التالي:

mokito_test caused an ERROR (at org.mockito.internal.creation.jmock.ClassImposterizer.<init>(ClassImposterizer.java:37))
  at org.mockito.internal.creation.jmock.ClassImposterizer.<init>(ClassImposterizer.java:37)
  at org.mockito.internal.util.CreationValidator.validateType(CreationValidator.java:14)
  at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:33)
...etc.

و(هناك 11 أخطاء أكثر، بما في ذلك في java.net، java.security، java.lang، وsun.misc).

ولكن، إذا كنت تنفيذ هذا الاختبار باستخدام كائن حقيقي بدلا من كائن سخر، كان الاختبار ناجحا:

@Test
public void animal_test(){

    Animal testAnimal1 = new Animal("bear");
    Animal testAnimal2 = new Animal("bear");

    assertTrue(testAnimal1.equals(testAnimal2));

}

وهذا الاختبار هو ناجحا.

ولقد تم تحميل الملف جرة Mockito (mockito النواة 1.8.0.jar) في دليل المشروع الخاص بي، ثم الرجوع إلى المسار النسبي لملف جرة في المكتبة اختبار لهذا المشروع بالذات. أنا لم تستخدم Mockito قبل، لذلك أظن أن الخطأ بلدي لديها ما تفعله مع تكوين نظام بلدي. أي مساعدة سيكون موضع تقدير كبير! شكرا!

هل كانت مفيدة؟

المحلول

وMockito لديها بعض التبعيات الخارجية على objenesis وhamcrest libraryes، خط 37 محاولات لبناء كائن من مكتبة objensis.

يرجى استخدام mockito بين جميع 1.8.jar بدلا من ذلك.

نصائح أخرى

هل أنت باستخدام mockito مع اختبار أداة JUnit .. لم يكن متأكدا ما كنت تحاول اختبار .. بعد إضافة ملف جرة المطلوبة (mockito للجميع جرة)، إنشاء اختبار مثل هذا. منذ كنت تستخدم الشرح يمكنك استخدامMock لإنشاء كائن وهمي

    @RunWith(MockitoJUnitRunner.class)
    public class AnimalTest {

    @Mock
    private Animal mockAnimal;

    @Test
    public void mokito_test(){

        when(mockAnimal.toString()).thenReturn("Some String");

        String toStringResult = mockAnimal.toString();

        //verify(mockAnimal).toString();  -- to verify toString() method called once on the mock
        assertTrue("Some String".equals(toStringResult);

    }
}

وإذا كان لديك الطبقة الحيوانية استخدام كائن طريقة C ب فإنك يسخرون من طريقة للكائن C مثل هو مبين أعلاه.

والاختبار كنت تقوم بتشغيل لم يتم اختبار أي شيء، ولا هو محاولة للتحقق من أي التفاعلات. تستخدم يسخر في أنظمة الكائن الموجه لتحديد كيف الأشياء تتفاعل مع بعضها البعض - حتى للتأكد من أن كائن واحد يقول أشياء أخرى لفعل الأشياء.

وأنها لا ينبغي أن تستخدم لحسابات اختبار، أو تغييرات حالة في الأشياء القيمة. باستخدام يسخر في هذه الأنواع من الاختبارات تؤدي إلى اختبارات هشة، لأنك مجرد تكرار تنفيذ التسطير من طريقتك.

وهكذا الأساليب على كائنات قيمة - مثل متساوين، شفرة التجزئة، toString، ينبغي أن يكون دائما اختبار باستخدام الهدف الحقيقي

ويوصف هذه العملية بشكل جيد للغاية في كتاب بعنوان "النمو الشيئية البرامج، إذ تسترشد الاختبارات".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top