লিগ্যাসি কোডের জন্য ইউনিট পরীক্ষা তৈরি করতে চাইলে স্পাই দরকারী হতে পারে ।
আমি এখানে একটি চলমান উদাহরণ তৈরি করেছি https://www.surasint.com/mockito-with-spy/ , আমি এর কয়েকটি এখানে অনুলিপি করছি।
আপনার কাছে এই কোডের মতো কিছু থাকলে:
public void transfer( DepositMoneyService depositMoneyService, WithdrawMoneyService withdrawMoneyService,
double amount, String fromAccount, String toAccount){
withdrawMoneyService.withdraw(fromAccount,amount);
depositMoneyService.deposit(toAccount,amount);
}
আপনার গোয়েন্দাগুলির প্রয়োজন নেই কারণ আপনি কেবল ডিপোজিটমনি সার্ভিস এবং উইথড্রোমনি সার্ভিসেসকে উপহাস করতে পারেন।
তবে কিছু সহ, লিগ্যাসি কোড, নির্ভরতা এই কোডগুলিতে থাকে:
public void transfer(String fromAccount, String toAccount, double amount){
this.depositeMoneyService = new DepositMoneyService();
this.withdrawMoneyService = new WithdrawMoneyService();
withdrawMoneyService.withdraw(fromAccount,amount);
depositeMoneyService.deposit(toAccount,amount);
}
হ্যাঁ, আপনি প্রথম কোডে পরিবর্তন করতে পারেন তবে তারপরে এপিআই পরিবর্তন করা হয়। যদি এই পদ্ধতিটি অনেক জায়গায় ব্যবহার করা হয় তবে আপনাকে সেগুলি সব পরিবর্তন করতে হবে।
বিকল্পটি হ'ল আপনি নির্ভরতাটি এর বাইরে বের করতে পারেন:
public void transfer(String fromAccount, String toAccount, double amount){
this.depositeMoneyService = proxyDepositMoneyServiceCreator();
this.withdrawMoneyService = proxyWithdrawMoneyServiceCreator();
withdrawMoneyService.withdraw(fromAccount,amount);
depositeMoneyService.deposit(toAccount,amount);
}
DepositMoneyService proxyDepositMoneyServiceCreator() {
return new DepositMoneyService();
}
WithdrawMoneyService proxyWithdrawMoneyServiceCreator() {
return new WithdrawMoneyService();
}
তারপরে আপনি গুপ্তচরকে ইনজেকশনটি এভাবে নির্ভরতা ব্যবহার করতে পারেন:
DepositMoneyService mockDepositMoneyService = mock(DepositMoneyService.class);
WithdrawMoneyService mockWithdrawMoneyService = mock(WithdrawMoneyService.class);
TransferMoneyService target = spy(new TransferMoneyService());
doReturn(mockDepositMoneyService)
.when(target).proxyDepositMoneyServiceCreator();
doReturn(mockWithdrawMoneyService)
.when(target).proxyWithdrawMoneyServiceCreator();
উপরের লিঙ্কে আরও বিশদ।