جافا مشكلة - الحصول على الأخطاء المتعلقة Mockito
سؤال
وأنا باستخدام مكتبة 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، ينبغي أن يكون دائما اختبار باستخدام الهدف الحقيقي
ويوصف هذه العملية بشكل جيد للغاية في كتاب بعنوان "النمو الشيئية البرامج، إذ تسترشد الاختبارات".