আরেকটি বিকল্প হ'ল ভাল পুরানো ফ্যাশন 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 কোড জুনিয়র বিকাশকারীদের লেখার , কারণ এটি যথাযথ অবজেক্টটি পাস হওয়ার জন্য তাদের কোডটির যুক্তি দেখায়।
কন: কখনও কখনও ক্ষেত্রটি অবজেক্টে পাস করা হচ্ছে একটি এলোমেলো আইডি। এই ক্ষেত্রে আপনি সহজেই আপনার মক কোডে প্রত্যাশিত আর্গুমেন্ট অবজেক্টটি তৈরি করতে পারবেন না।
আর একটি সম্ভাব্য পন্থা হ'ল মকিতোর Answerবস্তুটি যা whenপদ্ধতিটির সাথে ব্যবহার করা যেতে পারে use Answerআপনাকে আসল কলটি বাধা দিতে এবং ইনপুট আর্গুমেন্টটি পরিদর্শন করতে এবং একটি মক অবজেক্টটি ফিরিয়ে দিতে দেয়। নীচের উদাহরণে আমি anyউপহাসের পদ্ধতিটিতে কোনও অনুরোধ ধরতে ব্যবহার করছি । তবে Answerলাম্বদাতে, আমি আরও বাজো যুক্তিটি পরিদর্শন করতে পারি ... সম্ভবত এটির জন্য একটি সঠিক আইডি পাস হয়েছে তা যাচাই করতে to আমি এটিকে 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যুক্তি পরিদর্শন করা।