বিশেষ পরীক্ষার প্যাকেজে জুনিত শ্রেণি পৃথককরণ?


118

আমি আমার পূর্ববর্তী প্রশ্নের "জুনিট এবং সঠিক সফটওয়্যার ইঞ্জিনিয়ারিং শেখার জন্য নমুনা প্রকল্প" এর উত্তরে প্রস্তাবিত ক্র্যাফটসম্যান নিবন্ধগুলি ( টপিকের অধীনে কারিগর ক্লিক করুন ) পড়ার মাধ্যমে টেস্ট-চালিত বিকাশের ধারণাগুলি শিখছি । আমি এ পর্যন্ত ভালবাসি!

তবে এখন আমি নিজে বসে এটি চেষ্টা করতে চাই। আমার একটি প্রশ্ন রয়েছে যা আমি আশা করি কেবল একটি সহজ উত্তর প্রয়োজন হবে।

আপনি কীভাবে আপনার JUnit পরীক্ষা ক্লাস এবং আপনার আসল কোডটি সাজিয়ে রাখবেন? আমি মূলত প্যাকেজ কাঠামোর কথা বলছি তবে নোটের অন্য কোনও ধারণাটিও সহায়ক হবে।

আপনি org.myname.project.test। * এবং org.myname.project- এ সাধারণ কোড পরীক্ষার ক্লাস করেন? আপনি কি সাধারণ ক্লাসের পাশাপাশি পরীক্ষার ক্লাস রাখেন? আপনি কি ক্লাসের নামগুলি প্রত্যয় না দিয়ে পরীক্ষার সাথে উপসর্গ করতে পছন্দ করেন?

আমি জানি এটি খুব শীঘ্রই আমার সম্পর্কে উদ্বিগ্ন হওয়া উচিত নয়, তবে আমি খুব সংগঠিত কেন্দ্রিক ব্যক্তি person আমি প্রায় সেই ধরণের ব্যক্তি যিনি আসলে কাজটি করার পরিবর্তে কী করা উচিত তার ট্র্যাক রাখতে আরও বেশি সময় ব্যয় করেন।

এবং আমার কাছে এমন একটি প্রকল্প রয়েছে যা বর্তমানে খুব সুন্দরভাবে প্যাকেজগুলিতে বিভক্ত, তবে প্রকল্পটি গোলযোগে পরিণত হয়েছে। সমস্ত কিছু রিফ্যাক্টর করার এবং পরীক্ষাগুলি লেখার চেষ্টা করার পরিবর্তে, আমি নতুন এবং প্রথম পরীক্ষা শুরু করতে চাই। তবে প্রথমে আমার পরীক্ষাগুলি কোথায় তা জানতে হবে।


সম্পাদনা: আমি পুরোপুরি ম্যাভেনকে ভুলে গেছি, তবে মনে হচ্ছে আপনি বেশিরভাগই এটি ব্যবহার করছেন! অতীতে আমার একটি নির্দিষ্ট ব্যবহারের কেস ছিল যেখানে মাভেন সম্পূর্ণরূপে আমার উপর ভেঙে পড়েছিল কিন্তু পিপীলিকা আমাকে আমার প্রয়োজনীয় নমনীয়তা দেয়, তাই আমি পিঁপড়ার সাথে জড়িত হয়ে পড়েছিলাম, তবে আমি ভাবছিলাম আমি কেবল ভুল পদ্ধতির দিকে যাচ্ছিলাম। আমি মনে করি আমি ম্যাভেনকে আবার চেষ্টা করব কারণ মনে হচ্ছে এটি পরীক্ষামূলক চালিত বিকাশের সাথে ভাল চলে।


উত্তর:


154

আমি পরীক্ষার ক্লাসগুলিকে তাদের প্যাকেজ প্রকল্প ক্লাসের মতোই প্যাকেজে স্থাপন করা পছন্দ করি তবে ভিন্ন শারীরিক ডিরেক্টরিতে যেমন:

myproject/src/com/foo/Bar.java
myproject/test/com/foo/BarTest.java

কোনও ম্যাভেন প্রকল্পে এটি দেখতে এই রকম হবে:

myproject/src/main/java/com/foo/Bar.java
myproject/src/test/java/com/foo/BarTest.java

এর মূল বিষয় হ'ল আমার পরীক্ষার ক্লাসগুলি প্যাকেজ-স্কোপ ক্লাস এবং সদস্যদের অ্যাক্সেস করতে পারে (এবং পরীক্ষা!)।

উপরের উদাহরণটি যেমন দেখায়, আমার পরীক্ষার ক্লাসগুলিতে পরীক্ষিত শ্রেণীর প্লাসের নাম Testপ্রত্যয় হিসাবে রয়েছে। এটি তাদের দ্রুত খুঁজে পেতে সহায়তা করে - কয়েক শতাধিক পরীক্ষার ক্লাসের মধ্যে অনুসন্ধান করার চেষ্টা করা খুব মজাদার নয়, যার প্রত্যেকটির নাম দিয়ে শুরু হয় Test...

@ রিকেটের মন্তব্যে অনুপ্রেরিত আপডেট : এইভাবে পরীক্ষার ক্লাসগুলি (সাধারণত) তাদের পরীক্ষার বন্ধুকে ক্লাসের নামের বর্ধিত প্রকল্পভিত্তিক বর্ণমালার তালিকাতে প্রদর্শিত হয়। (মজার বিষয় যে আমি সচেতনভাবে বুঝতে পারি না যে কীভাবে আমি এই দিনে দিনে দিনে উপকৃত হচ্ছি ...)

আপডেট 2: মাভেনের মতো প্রচুর বিকাশকারী (নিজেকে সহ) তবে কমপক্ষে অনেকেই আছেন বলে মনে হয়। আইএমএইচও এটি "মূলধারার" জাভা প্রকল্পগুলির জন্য খুব দরকারী (আমি প্রায় 90% প্রকল্পগুলিকে এই বিভাগে রাখি ... তবে অন্য 10% এখনও একটি সংখ্যালঘু সংখ্যালঘু)। যদি কেউ মাভেন কনভেনশন গ্রহণ করতে পারে তবে এটি ব্যবহার করা সহজ; তবে যদি তা না হয় তবে তা জীবনকে এক দুর্বিষহ সংগ্রামে পরিণত করে। ম্যাভেনের পিঁপড়ের সাথে সামাজিকীকরণ করা অনেক লোকের পক্ষে বোঝা মুশকিল বলে মনে হচ্ছে, কারণ স্পষ্টতই এটির ভাবনার খুব আলাদা উপায় প্রয়োজন। (নিজে, পিঁপড়া কখনও ব্যবহার করেন নি, দুটির তুলনা করতে পারে না)) একটি বিষয় নিশ্চিতভাবে নিশ্চিত করা যায়: এটি ইউনিট (এবং সংহতকরণ) প্রক্রিয়াটির একটি প্রাকৃতিক, প্রথম-শ্রেণীর পদক্ষেপের পরীক্ষা করে তোলে, যা বিকাশকারীদের এই প্রয়োজনীয় অভ্যাসটি গ্রহণ করতে সহায়তা করে।


6
আমি প্রত্যয় নোটের সাথেও একমত। এছাড়াও পরীক্ষার ক্লাসগুলি পৃথক ফিজিকাল ফোল্ডারে বিভক্ত হওয়ার কারণে, বর্ণানুক্রমিক ক্রমকে গোষ্ঠীভুক্ত করার জন্য কিছু চেষ্টা করার সাথে টেস্টের সাথে উপক্রম করার দরকার নেই এবং আমি মনে করি সামার ক্লাসটেষ্ট আরও ভাল পড়ে।
রিচেট

দুর্দান্ত কনভেনশনগুলি +1
হুইস্কিসিয়ার

1
একই প্যাকেজে পরীক্ষার ক্লাস স্থাপনের একটি বিষয়: এটি প্যাকেজ-প্রাইভেট সদস্যদের ব্যবহার করার অনুমতি দেয় (যার কারণে আমি এই প্রকল্পটিও ব্যবহার করি), এটি স্বয়ংক্রিয়ভাবে দৃশ্যমানতা পরীক্ষা করার অনুমতি দেয় না, esp। আপনি যদি টিডিডি ব্যবহার করেন এবং আপনার আইডিই প্রয়োজনীয় পদ্ধতি স্টাবগুলি তৈরি করতে দেয়। এটি তাদের প্যাকেজ-প্রাইভেট ভিজিবিলিটি দিয়ে তৈরি করতে পারে (নেটবিয়ানস, আমি আপনাকে দেখছি), যা আপনার পরীক্ষাকে পুরোপুরি পাস করে তোলে (আপনি বাস্তবে বাস্তবায়নের পরে সেই স্টাবগুলি প্রয়োগ করেন) তবে বাস্তব ব্যবহারে ব্যর্থ হতে পারে (যদি আপনি যুক্ত করতে ভুলে যান public) ।
সের্গেই তাচেনভ

যদিও এই সম্মেলনটি আকর্ষণীয়, যখন পরীক্ষার স্যুটটি বাড়বে তখন আপনি কী করবেন? যেমন ধরুন আপনার ক্লাসে 6 টি পদ্ধতি রয়েছে, প্রতিটি পদ্ধতিতে 10 টি পরীক্ষা রয়েছে 10 আপনার ক্লাসে 60 টি পরীক্ষা আছে? আমি সাধারণত পরীক্ষার শ্রেণি (পদ্ধতি অনুসারে একটি পরীক্ষার ক্লাস) উপ-বিভাগ করি। এটির সাথে সমস্যা হ'ল আপনার টেস্ট প্যাকেজে আপনি অনেক ক্লাস খুঁজে পেতে পারেন।
মমলমেডা

1
অ্যাক্লিপসে টিক_প্রোফটি: প্রকল্পের নামের উপর ডান ক্লিক করুন, নতুন - অন্যান্য ... ক্লিক করুন, তারপরে জাভা ফোল্ডারের ভিতরে সোর্স ফোল্ডারটি নির্বাচন করুন। এটি "পরীক্ষা" নাম দিন। তারপরে যদি আপনি উপরের কনভেনশনটি অনুসরণ করতে না চান, আপনি যে শ্রেণীর জন্য পরীক্ষার কেস লিখতে চান সেই প্যাকেজের প্যাকেজের মতো একই নামযুক্ত এই পরীক্ষামূলক ফোল্ডারে একটি নতুন প্যাকেজ যুক্ত করুন, তারপরে প্যাকেজটিতে একটি নতুন JUnit টেস্ট কেস যুক্ত করুন (এতে অবস্থিত আপনি যখন নতুন-অন্যান্য করেন তখন জাভা / জুনিট ফোল্ডার। এই নতুন উইজার্ডে আপনি পরীক্ষা করা ক্লাসটি নির্দিষ্ট করতে পারেন এবং "টেস্ট" প্রত্যয় সহ আপনার পরীক্ষার
কেসটির

15

আমি আমার পরীক্ষার ক্লাসগুলিকে একই প্যাকেজে রেখেছি যা তারা পরীক্ষা করছে তবে ভিন্ন উত্স ফোল্ডার বা প্রকল্পে । এই ফ্যাশনে আমার পরীক্ষার কোডটি সংগঠিত করা আমাকে এটিকে সহজেই আলাদা করে সংকলন এবং প্যাকেজ করতে দেয় যাতে প্রোডাকশন জার ফাইলগুলিতে টেস্ট কোড না থাকে। এটি পরীক্ষার কোডটিকে ব্যক্তিগত ক্ষেত্র এবং পদ্ধতিগুলি প্যাকেজ অ্যাক্সেস করার অনুমতি দেয়।


12

আমি ব্যবহার ম্যাভেন । মাভেন যে কাঠামোটি প্রচার করেন তা হ'ল: -

src/main/java/org/myname/project/MyClass.java

src/test/java/org/myname/project/TestMyClass.java

অর্থাত পরীক্ষার অধীনে শ্রেণীর নামের সাথে টেপযুক্ত একটি পরীক্ষার শ্রেণি মূল পরীক্ষায় সমান্তরাল ডিরেক্টরি কাঠামোয়।

একই প্যাকেজে পরীক্ষার ক্লাস থাকার একটি সুবিধা (প্রয়োজনীয় ডিরেক্টরি যদিও নয়) আপনি মক টেস্ট অবজেক্টগুলি পরিদর্শন বা ইনজেক্ট করার জন্য প্যাকেজ-স্কোপ পদ্ধতিগুলি উত্তোলন করতে পারেন।


18
আমি যদিও এটি ছিল <class>Test.javaনাTest<class>.java
মাইক Rylander

2
ম্যাভেন পারেন প্যাটার্ন গ্রহণ করবে, অনুযায়ী ম্যাভেন surefire প্লাগইন ডকুমেন্টেশন
উডওয়ার্ড

3
আমি যুক্তি দিয়েছি যে <class>Test.javaআইডিই অনুসন্ধান বৈশিষ্ট্যগুলি ব্যবহার করার সময় নামকরণ প্রকল্পটি মূল শ্রেণি এবং পরীক্ষার ক্লাস উভয়কেই বন্ধ করে দেয়, যা এটিকে কিছুটা ভাল করে তোলে Test<class>.java
ক্রিসটোফেল

1
@ ক্রিস্টোফেল আমি সম্মতি জানাই, আমি এখন এটিই করি।
মার্টিন

এটি ইন্টেলিজের পক্ষে কাজ করেছিল। MyClassTest.java কাজ করেনি।
ব্যবহারকারী 2761431
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.