আমার জাভা ক্লাস আছে আমি কীভাবে এটি ইউনিট পরীক্ষা করতে পারি ?
আমার ক্ষেত্রে, আমার ক্লাসটি বাইনারি যোগফল করে। এটি দুটি byte[]
অ্যারে নেয় , তাদের যোগফল দেয় এবং একটি নতুন বাইনারি অ্যারে দেয়।
আমার জাভা ক্লাস আছে আমি কীভাবে এটি ইউনিট পরীক্ষা করতে পারি ?
আমার ক্ষেত্রে, আমার ক্লাসটি বাইনারি যোগফল করে। এটি দুটি byte[]
অ্যারে নেয় , তাদের যোগফল দেয় এবং একটি নতুন বাইনারি অ্যারে দেয়।
উত্তর:
সঠিক ইনপুট সহ সাধারণ কেসের জন্য প্রত্যাশিত এবং পছন্দসই আউটপুট সংজ্ঞা দিন।
এখন, ক্লাস ঘোষণা করে পরীক্ষাটি কার্যকর করুন, এটিকে কিছু নাম দিন (সাধারণত টেস্টএডিংমডুলের মতো কিছু) এবং এতে টেস্টএড পদ্ধতি যুক্ত করুন (যেমন নীচের মত):
assertEquals(expectedVal,calculatedVal)
।এটি চালিয়ে আপনার পদ্ধতিটি পরীক্ষা করুন (Eclipse এ, ডান ক্লিক করুন, রান হিসাবে → JUnit পরীক্ষা নির্বাচন করুন)।
//for normal addition
@Test
public void testAdd1Plus1()
{
int x = 1 ; int y = 1;
assertEquals(2, myClass.add(x,y));
}
পছন্দসই হিসাবে অন্যান্য কেস যুক্ত করুন।
পরীক্ষা করুন যে আপনার পদ্ধতি নুল ইনপুটগুলি কৃপণভাবে পরিচালনা করে (নীচে উদাহরণস্বরূপ)।
//if you are using 0 as default for null, make sure your class works in that case.
@Test
public void testAdd1Plus1()
{
int y = 1;
assertEquals(0, myClass.add(null,y));
}
@Test
স্বরলিপি প্রয়োজন। এটি ইউনিট পরীক্ষা রানারকে সিগন্যাল করার জন্য করা হয় যে এই পদ্ধতিটি ইউনিট পরীক্ষার প্রতিনিধিত্ব করে এবং সম্পাদন করা উচিত। যে পদ্ধতিগুলির সাথে টিকা @Test
দেওয়া হয় না সেগুলি পরীক্ষক দ্বারা চালানো হয় না।
null
জন্য একটি যুক্ত করা উচিত নয় ? y
y
static
পরীক্ষা পদ্ধতির সংশোধকটিতে যুক্ত করার দরকার নেই ।
আমি এই পোস্টটি ইন্টেলিজ এবং গ্রহন উভয়ের জন্য সরবরাহ করি ।
Eclipse:
আপনার প্রকল্পের ইউনিট পরীক্ষা করার জন্য, দয়া করে এই পদক্ষেপগুলি অনুসরণ করুন (আমি এই পরীক্ষাটি লেখার জন্য গ্রহনটি ব্যবহার করছি):
1- নতুন -> জাভা প্রকল্পে ক্লিক করুন।
2- আপনার প্রকল্পের নাম লিখুন এবং সমাপ্তিতে ক্লিক করুন।
3- আপনার প্রকল্পে রাইট ক্লিক করুন। তারপরে, নতুন -> শ্রেণিতে ক্লিক করুন।
4- আপনার শ্রেণীর নাম লিখুন এবং সমাপ্তিতে ক্লিক করুন।
তারপরে, ক্লাসটি এভাবে শেষ করুন:
public class Math {
int a, b;
Math(int a, int b) {
this.a = a;
this.b = b;
}
public int add() {
return a + b;
}
}
5- ফাইলটিতে ক্লিক করুন -> নতুন -> ইউনাইট টেস্ট কেস।
6- সেটআপ () পরীক্ষা করে দেখুন এবং ক্লিক করুন। সেটআপ () এমন এক জায়গা হবে যেখানে আপনি নিজের পরীক্ষা শুরু করেন।
7- ওকে ক্লিক করুন।
8- এখানে, আমি কেবল 7 এবং 10 যুক্ত করব। সুতরাং, আমি উত্তরটি 17 হওয়ার প্রত্যাশা করব your
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class MathTest {
Math math;
@Before
public void setUp() throws Exception {
math = new Math(7, 10);
}
@Test
public void testAdd() {
Assert.assertEquals(17, math.add());
}
}
9- প্যাকেজ এক্সপ্লোরারটিতে আপনার পরীক্ষার ক্লাসে ক্লিক করুন এবং রান হিসাবে -> জুনিত পরীক্ষায় ক্লিক করুন।
10- এটি পরীক্ষার ফলাফল।
ইন্টেলিজজে: নোট করুন যে আমি স্ক্রিনশটগুলির জন্য ইন্টেলিজ আইডিইএ সম্প্রদায় 2020.1 ব্যবহার করেছি। এছাড়াও, এই পদক্ষেপগুলির আগে আপনার জেআর সেট আপ করতে হবে। আমি জেডিকে 11.0.4 ব্যবহার করছি।
1- আপনার প্রকল্পের মূল ফোল্ডারে ডান ক্লিক করুন-> নতুন -> ডিরেক্টরি। আপনার এই 'পরীক্ষা' বলা উচিত। 2- টেস্ট ফোল্ডারে ডান ক্লিক করুন এবং সঠিক প্যাকেজ তৈরি করুন। আমি মূল বর্গ হিসাবে একই প্যাকেজিং নাম তৈরি করার পরামর্শ দিচ্ছি। তারপরে, আপনি পরীক্ষা ডিরেক্টরি -> চিহ্ন ডিরেক্টরি হিসাবে -> পরীক্ষার উত্স রুটে ডান ক্লিক করুন। 3- পরীক্ষা ডিরেক্টরিতে সঠিক প্যাকেজে আপনার জাভা ক্লাস তৈরি করতে হবে (আমি টেস্ট.জভা ব্যবহার করার পরামর্শ দিই)। 4- তৈরি শ্রেণিতে, '@ টেস্ট' টাইপ করুন। তারপরে, ইন্টেলিজ আপনাকে যে বিকল্পগুলি দেয়, তার মধ্যে ক্লাসপথে 'জুনিটেক্স' যুক্ত নির্বাচন করুন। 5- আপনার পরীক্ষা ক্লাসে আপনার পরীক্ষা পদ্ধতি লিখুন। পদ্ধতির স্বাক্ষরটি হ'ল:
@Test
public void test<name of original method>(){
...
}
আপনি নীচের মত আপনার দাবিগুলি করতে পারেন:
Assertions.assertTrue(f.flipEquiv(node1_1, node2_1));
এই যে আমদানিগুলি আমি যুক্ত করেছি:
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
আপনি নীচের মত আপনার পদ্ধতি পরীক্ষা করতে পারেন:
Assertions.assertEquals(<Expected>,<actual>);
Assertions.assertTrue(<actual>);
...
আপনার ইউনিট পরীক্ষা চালানোর জন্য, পরীক্ষায় ডান ক্লিক করুন এবং রান ক্লিক করুন।
যদি আপনার পরীক্ষা পাস হয়, ফলাফল নীচের মত হবে:
আমি আসা করি এটা সাহায্য করবে. আপনি প্রকল্পটির কাঠামোটি গিটহাব https://github.com/m-vahidalizadeh/problem_solving_project এ দেখতে পারেন ।
এটি একটি খুব সাধারণ প্রশ্ন এবং এর উত্তর দেওয়ার অনেক উপায় রয়েছে।
আপনি যদি পরীক্ষাগুলি তৈরি করতে JUnit ব্যবহার করতে চান, আপনার নিজের টেস্টকেস ক্লাস তৈরি করতে হবে, তারপরে পৃথক পরীক্ষার পদ্ধতিগুলি তৈরি করুন যা পরীক্ষার অধীনে আপনার শ্রেণি / মডিউলের নির্দিষ্ট কার্যকারিতা পরীক্ষা করে (একক টেস্টকেস ক্লাস সাধারণত একটি একক "উত্পাদন" শ্রেণীর সাথে জড়িত থাকে) পরীক্ষা করা হচ্ছে) এবং এই পদ্ধতির অভ্যন্তরে বিভিন্ন ক্রিয়াকলাপ চালানো হয় এবং ফলাফলগুলির সাথে তুলনা করুন যা সঠিক হবে। যতটা সম্ভব কোণার কেস চেষ্টা করা এবং আচ্ছাদন করা বিশেষত গুরুত্বপূর্ণ।
আপনার নির্দিষ্ট উদাহরণে, আপনি উদাহরণস্বরূপ নিম্নলিখিত পরীক্ষা করতে পারেন:
ফলাফল যাচাই করতে, আপনি org.junit.Assert শ্রেণীর কাছ থেকে বিভিন্ন assertXXX পদ্ধতি ব্যবহার করতে পারেন (সুবিধার জন্য, আপনি 'ইম্পোর্ট স্ট্যাটিক org.junit.Assert। *') করতে পারেন। এই পদ্ধতিগুলি একটি নির্দিষ্ট শর্ত পরীক্ষা করে এবং যদি এটি বৈধতা না দেয় তবে পরীক্ষায় ব্যর্থ হয় (একটি নির্দিষ্ট বার্তা সহ, allyচ্ছিকভাবে)।
আপনার ক্ষেত্রে টেস্টকেস ক্লাসের উদাহরণ দিন (পদ্ধতিগুলির বিষয়বস্তু সংজ্ঞায়িত ছাড়াই):
import static org.junit.Assert.*;
public class AdditionTests {
@Test
public void testSimpleAddition() { ... }
@Test
public void testPositiveNegativeAddition() { ... }
@Test
public void testNegativePositiveAddition() { ... }
@Test
public void testNegativeAddition() { ... }
@Test
public void testOverflow() { ... }
}
আপনি যদি ইউনিট পরীক্ষা লিখতে অভ্যস্ত না হন তবে পরিবর্তে আপনার কোডটি অ্যাড-হক পরীক্ষা করে পরীক্ষা করেন যা আপনি "দৃষ্টিভঙ্গি" যাচাই করেছেন (উদাহরণস্বরূপ, আপনি একটি সাধারণ মূল পদ্ধতি লিখেন যা কীবোর্ড ব্যবহার করে প্রবেশ করা আর্গুমেন্ট গ্রহণ করে এবং ফলাফলগুলি মুদ্রণ করে - এবং তারপরে আপনি মানগুলি প্রবেশ করিয়েছেন এবং ফলাফলগুলি সঠিক হলে নিজেকে বৈধ করে তোলেন), তবে আপনি উপরের ফর্ম্যাটে এই জাতীয় পরীক্ষা করে লিখে নিজেই না করে সঠিক অ্যাসেটরএক্সএক্সএক্স পদ্ধতিতে ফলাফলগুলি বৈধ করে শুরু করতে পারেন। এইভাবে, আপনি যদি ম্যানুয়াল টেস্টগুলি করতে হয় তবে আপনি পরীক্ষাটি আবার খুব সহজে চালাতে পারবেন।
ভালো লেগেছে @CoolBeans উল্লেখ করা হয়েছে, কটাক্ষপাত করা jUnit । এখানে আপনাকে জুনিত 4.x দিয়ে শুরু করার জন্য একটি ছোট টিউটোরিয়াল দেওয়া আছে
পরিশেষে, আপনি যদি সত্যিই টেস্টিং এবং টেস্ট-চালিত বিকাশ (টিডিডি) সম্পর্কে আরও জানতে চান তবে আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি কেন্ট বেকের নিম্নলিখিত বইটি একবার দেখে নিন: উদাহরণ অনুসারে টেস্ট-চালিত বিকাশ ।
অন্যান্য উত্তরগুলি আপনাকে দেখিয়েছে যে কীভাবে পরীক্ষার ক্লাস স্থাপন করতে JUnit ব্যবহার করবেন। JUnit একমাত্র জাভা পরীক্ষার কাঠামো নয়। কোনও কাঠামো ব্যবহারের প্রযুক্তিগত বিশদগুলিতে মনোনিবেশ করা তবে আপনার ক্রিয়াকলাপকে পরিচালিত করা উচিত এমন গুরুত্বপূর্ণ ধারণা থেকে বিরত থাকে, তাই আমি সেগুলি সম্পর্কে কথা বলব।
পরীক্ষা (সমস্ত ধরণের সমস্ত ধরণের বিষয়) কোনও কিছুর আসল আচরণের (সিস্টেমের আন্ডার টেস্ট, এসইউটি) এর প্রত্যাশিত আচরণের সাথে তুলনা করে ।
কম্পিউটার প্রোগ্রাম ব্যবহার করে অটোমেটেড টেস্টিং করা যেতে পারে। যে তুলনাটি একটি জটিল এবং অবিজ্ঞানী কম্পিউটার প্রোগ্রাম দ্বারা করা হচ্ছে, প্রত্যাশিত আচরণটি অবশ্যই অবিকল এবং দ্ব্যর্থহীনভাবে জানা উচিত।
কোন প্রোগ্রাম বা কোনও প্রোগ্রামের অংশ (একটি শ্রেণি বা পদ্ধতি) এর প্রত্যাশা করা হয় তা এর স্পেসিফিকেশন । টেস্টিং সফ্টওয়্যার সুতরাং আপনার প্রয়োজন এসইউটি জন্য একটি স্পেসিফিকেশন। এটি সুস্পষ্ট বিবরণ হতে পারে, বা যা আশা করা হয় তার মধ্যে আপনার অন্তর্নিহিত স্পেসিফিকেশন is
স্বয়ংক্রিয় ইউনিট পরীক্ষার জন্য আপনি যে শ্রেণী বা পদ্ধতিটি পরীক্ষা করছেন তার একটি সুনির্দিষ্ট এবং দ্ব্যর্থহীন স্পেসিফিকেশন প্রয়োজন।
আপনি যখন সেই কোডটি লেখার উদ্দেশ্যে যাত্রা করেছিলেন তখন আপনার সেই স্পেসিফিকেশনটির দরকার ছিল। সুতরাং টেস্টিংয়ের অংশটি আসলে এসইউটির এমনকি একটি লাইন লেখার আগেই শুরু হয়। টেস্ট ড্রাইভেন ডেভলপমেন্টের (টিডিডি) পরীক্ষার কৌশলটি সেই ধারণাটিকে এক চূড়ান্ত পর্যায়ে নিয়ে যায় এবং কোডটি পরীক্ষার আগে আপনি লেখার আগে আপনি ইউনিট টেস্টিং কোড তৈরি করেছেন।
ইউনিট অবকাঠামো পরীক্ষা ব্যবহার করে আপনার SUT পরীক্ষা গবেষকেরা । একটি দৃser়তা একটি লজিক্যাল এক্সপ্রেশন ( boolean
ফলাফলের ধরণের একটি এক্সপ্রেশন ; একটি প্রিকিকেট ) যা true
এসইউটি সঠিকভাবে আচরণ করছে কিনা তা অবশ্যই। স্পেসিফিকেশন অবশ্যই যুক্তি হিসাবে প্রকাশ করা (বা পুনরায় প্রকাশ করা) আবশ্যক।
জোর হিসাবে চুক্তি দ্বারা প্রোগ্রামিং হয় হিসাবে একটি স্পেসিফিকেশন প্রকাশ করার জন্য একটি দরকারী কৌশল । এই স্পেসিফিকেশন পোস্টকন্ডিশনের শর্তাবলী । কোনও পোস্টকন্ডিশন হ'ল কোনও পদ্ধতি বা কনস্ট্রাক্টর থেকে ফিরে আসার পরে SUT এর সর্বজনীনভাবে দৃশ্যমান স্থিতির বিষয়ে একটি দাবি। কিছু পদ্ধতি postconditions যে আছে invariants , যা predicates আগে এবং পদ্ধতি কার্যকর পর পূর্ণ করেছে। কোনও শ্রেণিকে আক্রমণকারীও বলা যেতে পারে, যা শ্রেণীর প্রতিটি নির্মাতা এবং পদ্ধতির পোস্টকন্ডিশন এবং তাই সর্বদা সত্য হওয়া উচিত । পোস্টকন্ডিশনগুলি (এবং আক্রমণকারীরা) কেবল প্রচারের দৃশ্যমান রাষ্ট্রের ক্ষেত্রে প্রকাশ করা হয়: public
এবং protected
ক্ষেত্রগুলি, ফেরত দেওয়া মানগুলি দ্বারা ফেরতpublic
এবং protected
পদ্ধতিগুলি (যেমন গেটার্স) এবং অবজেক্টগুলির সর্বজনীনভাবে দৃশ্যমান স্থিতিগুলি (রেফারেন্স দ্বারা) পদ্ধতিগুলিতে পাস হয়।
অনেক শিক্ষানবিশরা এখানে কোডগুলি উপস্থাপন করে কিন্তু সেই কোডটির নির্দিষ্টকরণ উল্লেখ না করে কীভাবে কিছু কোড পরীক্ষা করতে পারে তা জানতে এখানে প্রশ্ন পোস্ট করে। এই আলোচনাটি যেমন দেখায়, কারও পক্ষে এ জাতীয় প্রশ্নের উত্তরের উত্তর দেওয়া অসম্ভব , কারণ সর্বোপরি সম্ভাব্য উত্তরদাতাদের অবশ্যই নির্দিষ্টকরণটি অনুমান করতে হবে এবং এটি ভুলভাবে করতে পারে। প্রশ্নকর্তা প্রশ্ন স্পষ্টরূপে একটি নির্দিষ্ট গুরুত্ব বুঝতে না, এবং এইভাবে একটি ব্রতী যারা মৌলিক আমি এখানে বর্ণনা করেছি বুঝতে প্রয়োজন সামনে কিছু পরীক্ষা কোড লিখতে করার চেষ্টা করছে।