मैं mockito का एक बड़ा प्रशंसक हूँ, one of my projects जो जावा 8 का उपयोग करता है के लिए दुर्भाग्य से, यह मुझ पर विफल रहता है ...क्या आप इंटरफ़ेस में डिफ़ॉल्ट विधियों के साथ मॉकिटो (1.10.17) काम कर सकते हैं?
परिदृश्य: foo.bar()
रिटर्न
public final class MockTest
{
@Test
public void testDefaultMethodsWithMocks()
{
final Foo foo = mock(Foo.class);
//when(foo.bar()).thenCallRealMethod();
assertThat(foo.bar()).isEqualTo(42);
}
@FunctionalInterface
private interface Foo
{
int foo();
default int bar()
{
return 42;
}
}
}
दुर्भाग्य से, परीक्षण विफल रहता है और 0.
जब मैं when()
लाइन uncomment, मैं एक स्टैक ट्रेस मिलता है ...
java.lang.NoSuchMethodError: java.lang.Object.bar()I
at com.github.fge.lambdas.MockTest.testDefaultMethodsWithMocks(MockTest.java:18)
यह मैवेन पर उपलब्ध नवीनतम स्थिर संस्करण है; चारों ओर गुगल करने से मुझे जावा 8 में इस नई कार्यक्षमता के संबंध में मॉकिटो की स्थिति के बारे में बहुत कुछ नहीं बताया गया था ...
क्या आप इसे इंटरफेस और spy()
पर लागू करने के अलावा किसी अन्य तरीके से काम कर सकते हैं (यह काम करता है)?
मुझे लगता है कि इस तरह से है कि Mockito mocks के लिए गतिशील प्रॉक्सी पीढ़ी संभालती है और बुनियादी सुविधाओं के लिए एक अद्यतन की आवश्यकता होगी का प्रभाव है। क्या आपने जांच की है कि इसके लिए मॉकिटो के खिलाफ कोई बकाया मुद्दा है या नहीं? – chrylis
@chrylis no, विशेष रूप से इस बिंदु के लिए नहीं; जावा 8 और डिफॉल्ट विधियों से संबंधित एक मुद्दा खोला गया है, और इश्यु ओपनर ने सही तरीके से बताया (मैं बेवकूफ हूं कि पहले इस बारे में सोचा नहीं था) कि उसे परीक्षण कार्य करने के लिए जावा 8 के साथ मॉकिटो संकलित करना पड़ा। उदास लग रहा है:/ – fge
हाँ। वहाँ अभी भी कुछ पुस्तकालय हैं जो 1.4 के लिए कांटे बनाए रखते हैं। – chrylis