পরীক্ষার প্যাকেজগুলির জন্য নামকরণের সম্মেলন


11

আমরা আসলে আমাদের পরীক্ষার প্যাকেজগুলির নামকরণ করছি কেবল তাদের পরীক্ষার অংশগুলির মতো। সুতরাং আমরা এই কাঠামো দিয়ে শেষ:

src/main/java
    com.hello.world
        helloWorld.java
src/test/java
    com.hello.world
        helloWorldTest.java

আমি সর্বদা অনুভব করি যে এটি দুর্দান্ত স্মার্ট নয় কারণ আপনি কেবলমাত্র প্যাকেজের নাম সরবরাহ করলে "পরীক্ষা" এবং "টু-টেস্ট" এর মধ্যে পার্থক্য করতে পারবেন না। অন্যদিকে আমি সত্যিই এমন কোনও মামলা পাইনি যেখানে এটি কোনওভাবেই গুরুত্বপূর্ণ। উভয় প্যাকেজ (পরীক্ষার ক্ষেত্রে এবং উত্স শ্রেণীর জন্য) একই নামকরণ কনভেনশন রাখা কি ভাল অনুশীলন? তা না হলে এর চেয়ে ভাল পদ্ধতির আর কী হবে?


1
এটি ভাল অনুশীলন কিনা ধারণা নেই তবে এটি একটি জনপ্রিয় one অন্য বিকল্পটি (প্যাকেজের নাম, পদ্ধতির নাম ইত্যাদিতে "টেস্ট" লাগাতে) "স্মুরফ নামকরণ" এর কিছুটা বেশি স্মাক করে। আপনি যেমন বলেছিলেন, কেবলমাত্র প্যাকেজের নাম সরবরাহ করা থাকলে "টেস্ট" এবং "টু-টেস্ট" এর মধ্যে "পার্থক্য করতে না পারার ক্ষেত্রে সমস্যাটি মনে করা শক্ত"।
ডেভিড আরনো

@ ডেভিডআরনো আপনার ইনপুটটির জন্য ধন্যবাদ :) তখন স্মুরফ-নামকরণ কীভাবে এড়ানো যায়? মানে আমরা com.hello.world.test.helloWorld.java দিয়ে শেষ করব, তাই না?
অডডেভ

"স্মুরফ" সমস্যাটি তখন বেশি হয় যখন আপনি কোনও পদ্ধতি ব্যবহার XXXTest()করেন com.hello.world.test.helloWorldTest.java। সাধারণ পরামর্শটি কেবলমাত্র "টেস্ট" একবারে একবারে উপস্থিত হওয়া উচিত, সুতরাং (ক) প্যাকেজের নামে পরীক্ষাটি ব্যবহার করুন (এবং পরীক্ষার ফাইলটিকে পরীক্ষার অধীনে থাকা ফাইলের মতো করুন) বা (খ) প্যাকেজের নামটি তৈরি করুন একই এবং ফাইল / শ্রেণির নামের সাথে "পরীক্ষা" যুক্ত করুন।
ডেভিড আরনো

@ ডেভিড আর্নো আহ, স্পষ্টতার জন্য ধন্যবাদ! আমি আপনার প্রথম মন্তব্য ভুল পেয়েছি। আমি এখন এটা পেয়েছিলাম.
অডডেভ

তবে আমি যে তর্ক করা চাই, যদি অস্পষ্ট ছিল, আমি আমার প্রথম মন্তব্য ভুল :) পেয়েছিলাম
ডেভিড আরনো

উত্তর:


11

এটি একটি ভাল সম্মেলন।

কখনও কখনও আপনি প্যাকেজ-প্রাইভেট ক্লাস এবং পদ্ধতিগুলির জন্য ইউনিট পরীক্ষা লিখতে চান want আপনি অন্য প্যাকেজে রাখা ইউনিট পরীক্ষার ক্লাস থেকে তাদের কল করতে পারবেন না।

উত্পাদনের কোডটি সংকলন বা পরিচালনা করার সময় একই নামস্থানে ইউনিট পরীক্ষার ক্লাস থাকার বিষয়ে কোনও বিভ্রান্তি হওয়া উচিত নয়।

এখানে একটি পাবলিক ইন্টারফেস, একটি পাবলিক ফ্যাক্টরি ক্লাস এবং দুটি প্যাকেজ-বেসরকারী বাস্তবায়ন ক্লাস সহ একটি ছোট মডিউলটির উদাহরণ রয়েছে:

src/main/java:
    com.hello.transmogrifier
        public interface Transmogrifier
        public class TransmogrifierFactory
        class MapTransmogrifier implements Transmogrifier
        class ListTransmogrifier implements Transmogrifier

scr/test/java:
    com.hello.transmogrifier
        public class TransmogrifierFactoryTest
        public class MapTransmogrifierTest
        public class ListTransmogrifierTest

ট্রান্সমোগ্রিফায়ার ইন্টারফেসের বাস্তবায়নগুলি গোপন করা কোনও বৈধ নকশা পছন্দ হতে পারে। সম্ভবত বাস্তবায়নটি বেছে নেওয়ার দায়িত্ব কারখানা শ্রেণীর।

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


1
"সাধারণত আপনি প্যাকেজ-প্রাইভেট ক্লাস এবং পদ্ধতিগুলির জন্য ইউনিট পরীক্ষা লিখতে চান"। না! এটি আসলেই খারাপ অভ্যাস। প্যাকেজ ব্যক্তিগত প্রকারগুলি বাস্তবায়ন বিশদ এবং কখনও কখনও সরাসরি পরীক্ষা করা উচিত নয়। কেবল সর্বজনীন এপিআই পরীক্ষা করুন।
ডেভিড আরনো

1
@ ডেভিড আর্নো আমি একমত নই যাইহোক, আমি সেই নির্দিষ্ট আলোচনা এড়াতে "কখনও কখনও" শব্দের সাথে "সাধারণত" শব্দটি প্রতিস্থাপন করেছি।
থেকে আসা

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

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

তারপর একদিন, আপনি তাকান MapTransmogrifierএবং ListTransmogrifierএবং সিদ্ধান্ত তারা এক বর্গ মধ্যে তৈরি করা যায়নি, তাই আপনি তৈরি ListMapTransmogrifier, ফ্যাক্টরি ব্যবহার করতে এবং দুটি ক্লাস মুছতে পরিবর্তন করুন। কোডটি এখন সংকলন করে না, সুতরাং আপনাকে উভয় পরীক্ষায় পরিবর্তন করতে হবে MapTransmogrifierTestএবং ListTransmogrifierTestএটি সংকলন করতে হবে। একটি পরীক্ষা ব্যর্থ হয়। এটি কি পরীক্ষাগুলি পরিবর্তন করার কারণে বা তৈরি করার কারণে হয়েছিল ListMapTransmogrifier? বের করার জন্য ডিবাগারটি বেরিয়ে আসে ... বিকল্প হিসাবে যখন পরীক্ষাগুলি ফ্যাক্টরিটি ব্যবহার করে, আপনি সেই রিফ্যাক্টরটি করেন এবং এখনও সমস্ত সংকলন করেন ...
ডেভিড আরনো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.