तुम सिर्फ सार में से किसी को बिना छुए ठोस तरीकों के कुछ परीक्षण करने के लिए की जरूरत है, तो आप CALLS_REAL_METHODS
(Morten's answer देखें), लेकिन परीक्षण के अंतर्गत ठोस विधि सार, या लागू नहीं इंटरफ़ेस तरीकों के कुछ कहता है, इसका उपयोग कर सकते काम नहीं करेगा - मॉकिटो शिकायत करेगा "जावा इंटरफ़ेस पर वास्तविक विधि को कॉल नहीं कर सकता।"
(हाँ, यह एक घटिया डिजाइन है, लेकिन कुछ चौखटे, जैसे टेपेस्ट्री 4, एक तरह से यह आप पर मजबूर करते हैं।)
वैकल्पिक हल इस दृष्टिकोण को उल्टा करने के लिए है - साधारण नकली व्यवहार का उपयोग (यानी, सब कुछ मज़ाक उड़ाया/टोंटदार) और doCallRealMethod()
का उपयोग स्पष्ट रूप से परीक्षण के अंतर्गत ठोस विधि बाहर कॉल करने के लिए। जैसे
public abstract class MyClass {
@SomeDependencyInjectionOrSomething
public abstract MyDependency getDependency();
public void myMethod() {
MyDependency dep = getDependency();
dep.doSomething();
}
}
public class MyClassTest {
@Test
public void myMethodDoesSomethingWithDependency() {
MyDependency theDependency = mock(MyDependency.class);
MyClass myInstance = mock(MyClass.class);
// can't do this with CALLS_REAL_METHODS
when(myInstance.getDependency()).thenReturn(theDependency);
doCallRealMethod().when(myInstance).myMethod();
myInstance.myMethod();
verify(theDependency, times(1)).doSomething();
}
}
जोड़ने के लिए अपडेट किया गया:
गैर शून्य तरीकों के लिए, आप के बजाय thenCallRealMethod()
का उपयोग करना होगा, जैसे:
when(myInstance.myNonVoidMethod(someArgument)).thenCallRealMethod();
अन्यथा Mockito "अधूरा शिकायत stubbing पता चला।"
स्रोत
2011-09-12 23:14:51
मॉकिटो [1.10.12] (http://site.mockito.org/mockito/docs/current/org/mockito/Mockito.html#30) के रूप में, मॉकिटो सीधे सार वर्गों को जासूसी/मजाक करने का समर्थन करता है: 'कुछ सार जासूस = जासूसी (SomeAbstract.class); ' – pesche