ইউনিট টেস্টিংয়ের সময় আপনি কোনও ডাটাবেস, বা কমপক্ষে, কোনও ইউনিট পরীক্ষার জন্য প্রস্তুত নন এমন একটি ডাটাবেস দিয়ে পরীক্ষা করার আশা করছেন না। একটি ডাটাবেস দিয়ে পরীক্ষা করা, এবং যেমন, একই সাথে আপনার অ্যাপ্লিকেশনটির বিভিন্ন স্তরের পরীক্ষা করা সাধারণত ইন্টিগ্রেশন টেস্ট হিসাবে দেখা হয় । ইউনিট পরীক্ষাগুলির সাহায্যে আপনাকে কেবল পরীক্ষা করতে হবে যে আপনার পদ্ধতিটি কী করে, এটি বিভিন্ন পরামিতিগুলির উপর নির্ভর করে কী ফিরে আসে এবং কখন (বা না) এটি ব্যর্থ হওয়া উচিত।
এটি খুব আশা করা যায় যে আপনার পদ্ধতিতে আপনি অন্যান্য ক্লাস থেকে এক্স পদ্ধতিতে কল করেন । আপনি এই এক্স পদ্ধতিগুলি পরীক্ষা করছেন না তাই আপনাকে যা করতে হবে তা হল এই পদ্ধতিগুলিকে বিদ্রূপ করা ।
আমি মনে করি আপনি জাভাতে আপনার কোডটি লিখছেন, সেক্ষেত্রে আপনার দুর্দান্ত মক্কর ফ্রেমওয়ার্ক রয়েছে যেমন মকিতো যা আপনার পক্ষে সহায়ক হতে পারে। আপনি একটি মশকরা কাঠামো ব্যবহার করেন বা না করেন তা আপনার পছন্দ, আমি কেবলমাত্র তারা বলবে যে তারা আপনাকে অনেক সময় সাশ্রয় করবে এবং আমি অন্তত যা উল্লেখ করেছি তা সত্যিই জটিল নয় not
আপনি যদি পরীক্ষার জন্য কেবল নিজের বিদ্রূপটি লিখতে চান তবে মনে করুন আপনার নীচের CustomerRepository
ক্লাসটি রয়েছে:
public class CustomerRepository {
public CustomerDTO getCustomer(int id) {
...
}
}
আপনি নিজের উপহাস এবং নোংরা CustomerRepository
ক্লাসটি নিম্নলিখিত উপায়ে লিখতে পারেন :
public class MockedCustomerRepository extends CustomerRepository {
public boolean bThrowDatabaseException;
public boolean bReturnNull;
public boolean bReturnCustomerWrongId;
public boolean bReturnCustomerWithId;
public CustomerDTO getCustomer(int id) {
if(bThrowDatabaseException) {
throw new DatabaseException("xxx");
} else if(bReturnNull) {
return null;
} else if(bReturnCustomerWrongId) {
throw new CustomerNotExistException(id);
} else if(bReturnCustomerWithId) {
return new CustomerDTO(id);
}
}
}
তারপরে, আপনার পরীক্ষার ক্ষেত্রে আপনি মূলত আপনার "মানক" দৃষ্টান্তটিকে CustomerRepository
একটি বিদ্রূপিত উদাহরণের সাথে প্রতিস্থাপন করেন যা আপনাকে বিভিন্ন ফলাফলের জন্য আপনার পদ্ধতিটি পরীক্ষা করতে দেয় getCustomer
:
public class CustomerRestTest {
public void testGetCustomer_databaseFailure() {
MockedCustomerRepository dto = new MockedCustomerRepository();
dto.bThrowDataBaseException = true;
yRestClass rest = new MyRestClass();
rest.dto = dto;
rest.getCustomer(0);
// depending on what you do in your getCustomer method, you should check if you catched the exception, or let it pass, etc.. Make your assertions here
public void testGetCustomer_customerNotExist() {
// etc.
}
}
সাধারণত, প্রতিটি পরীক্ষার পদ্ধতিতে কেবল একটি জিনিস পরীক্ষা করা উচিত, এটি আপনার পরীক্ষাগুলি ছোট রাখতে এবং একটি কাজে মনোনিবেশ করতে সহায়তা করে।
আমি এটির পুনরাবৃত্তি করতে যাচ্ছি :-) পুরো বিদ্রূপিত শ্রেণিটি লিখতে আপনার দেখা হিসাবে কিছুটা সময় লাগে। একটি উপহাসের কাঠামো ব্যবহারের কথা বিবেচনা করুন, কম কোড লিখছেন, ত্রুটিগুলি যত কম করবে , তাই না? একটি ব্যতিক্রম ছুঁড়ে এমন কোনও পদ্ধতি উপহাস করা, বা প্রদত্ত প্যারামিটারের জন্য প্রদত্ত মান ফেরত দেওয়ার জন্য এটি একটি কেকের টুকরো এবং 2 বা 3 লাইন লাগে (কমপক্ষে মকিতো সহ)
আশা করি এটি আপনার REST পদ্ধতিটি পরীক্ষা করতে সহায়তা করে।