एक अन्य विकल्प अच्छी पुरानी फैशन equals
पद्धति पर भरोसा करना है । जब तक when
मॉक equals
में तर्क का परीक्षण किया जा रहा है, तब मॉकिटो मॉक से मेल खाएगा।
यहाँ एक उदाहरण है।
public class MyPojo {
public MyPojo( String someField ) {
this.someField = someField;
}
private String someField;
@Override
public boolean equals( Object o ) {
if ( this == o ) return true;
if ( o == null || getClass() != o.getClass() ) return false;
MyPojo myPojo = ( MyPojo ) o;
return someField.equals( myPojo.someField );
}
}
फिर, यह मानते हुए कि आपके लिए मूल्य क्या someField
होगा, आप इसे इस तरह से मॉक कर सकते हैं।
when(fooDao.getBar(new MyPojo(expectedSomeField))).thenReturn(myFoo);
पेशेवरों: यह अधिक स्पष्ट तो any
मैचर्स है। कोड के समीक्षक के रूप में, मैं any
कोड जूनियर डेवलपर्स के लिए एक आंख खुली रखता हूं , क्योंकि यह उनके कोड के तर्क पर नज़र रखता है ताकि उपयुक्त ऑब्जेक्ट को पारित किया जा सके।
con: कभी-कभी ऑब्जेक्ट को पास किया जा रहा फ़ील्ड रैंडम ID होता है। इस मामले के लिए आप आसानी से अपने मॉक कोड में अपेक्षित तर्क ऑब्जेक्ट का निर्माण नहीं कर सकते हैं।
एक अन्य संभावित दृष्टिकोण मॉकिटो की Answer
वस्तु का उपयोग करना है जिसे when
विधि के साथ उपयोग किया जा सकता है । Answer
आपको वास्तविक कॉल को इंटरसेप्ट करने और इनपुट तर्क का निरीक्षण करने और एक नकली वस्तु वापस करने की सुविधा देता है। नीचे दिए गए उदाहरण में मैं any
किसी भी अनुरोध को पकड़ने के लिए उपयोग किया जा रहा हूं । लेकिन फिर Answer
लंबोदर में, मैं आगे बाजो तर्क का निरीक्षण कर सकता हूं ... शायद यह सत्यापित करने के लिए कि इसके लिए एक उचित आईडी पारित की गई थी। मैं इसे any
अपने आप से अधिक पसंद करता हूं ताकि तर्क पर कम से कम कुछ निरीक्षण किया जाए।
Bar mockBar = //generate mock Bar.
when(fooDao.getBar(any(Bazo.class))
.thenAnswer( ( InvocationOnMock invocationOnMock) -> {
Bazo actualBazo = invocationOnMock.getArgument( 0 );
//inspect the actualBazo here and thrw exception if it does not meet your testing requirements.
return mockBar;
} );
इसलिए इसे पूरा करने के लिए, मुझे भरोसा करना पसंद है equals
(जहां अपेक्षित तर्क और वास्तविक तर्क एक-दूसरे के बराबर होने चाहिए) और यदि बराबर संभव नहीं है (वास्तविक तर्क की स्थिति की भविष्यवाणी करने में सक्षम नहीं होने के कारण), तो मैं इसका सहारा लूंगा। Answer
तर्क का निरीक्षण करने के लिए।