আরেকটি বিকল্প হ'ল ভাল পুরানো ফ্যাশন 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
যুক্তি পরিদর্শন করা।