ইউনিট টেস্ট কিভাবে লিখবেন?


135

আমার জাভা ক্লাস আছে আমি কীভাবে এটি ইউনিট পরীক্ষা করতে পারি ?


আমার ক্ষেত্রে, আমার ক্লাসটি বাইনারি যোগফল করে। এটি দুটি byte[]অ্যারে নেয় , তাদের যোগফল দেয় এবং একটি নতুন বাইনারি অ্যারে দেয়।


7
আপনি জাভা হিসাবে একটি সরঞ্জাম ব্যবহার করতে পারেন এবং আপনার জাভা শ্রেণীর জন্য পরীক্ষার কেসগুলি (পরীক্ষার পদ্ধতি) লিখতে পারেন । তারপরে বিল্ড প্রক্রিয়া (পিপীলিকা / ম্যাভেন) এর অংশ হিসাবে junit পরীক্ষার জন্য অনুরোধ করুন। জুনিট ব্যবহার করা মোটেই শক্ত নয়, শক্ত অংশটি এমন অনেক পরীক্ষার পরিস্থিতি নিয়ে আসবে যা আপনি ভাবতে পারেন যাতে আপনি প্রথম দিকে এবং প্রায়শই বাগগুলি ধরেন।
কুলবিয়ানস

উত্তর:


133
  1. সঠিক ইনপুট সহ সাধারণ কেসের জন্য প্রত্যাশিত এবং পছন্দসই আউটপুট সংজ্ঞা দিন।

  2. এখন, ক্লাস ঘোষণা করে পরীক্ষাটি কার্যকর করুন, এটিকে কিছু নাম দিন (সাধারণত টেস্টএডিংমডুলের মতো কিছু) এবং এতে টেস্টএড পদ্ধতি যুক্ত করুন (যেমন নীচের মত):

    • একটি পদ্ধতি লিখুন এবং তার উপরে @ টেস্ট টীকা যুক্ত করুন।
    • পদ্ধতিতে, আপনার বাইনারি যোগফল এবং assertEquals(expectedVal,calculatedVal)
    • এটি চালিয়ে আপনার পদ্ধতিটি পরীক্ষা করুন (Eclipse এ, ডান ক্লিক করুন, রান হিসাবে → JUnit পরীক্ষা নির্বাচন করুন)।

      //for normal addition 
      @Test
      public void testAdd1Plus1() 
      {
          int x  = 1 ; int y = 1;
          assertEquals(2, myClass.add(x,y));
      }
      
  3. পছন্দসই হিসাবে অন্যান্য কেস যুক্ত করুন।

    • পরীক্ষা করুন যে কোনও বর্ধিত ওভারফ্লো যদি আপনার বাইনারি যোগফল একটি অপ্রত্যাশিত ব্যতিক্রম ছুঁড়ে না দেয়।
    • পরীক্ষা করুন যে আপনার পদ্ধতি নুল ইনপুটগুলি কৃপণভাবে পরিচালনা করে (নীচে উদাহরণস্বরূপ)।

      //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));
      }
      

১.একটি পরীক্ষার স্বরলিপি প্রয়োজন? 2. কেন assertNotNull দিয়ে নাল ইনপুটটির জন্য পরীক্ষা করা হচ্ছে না? ৩. ইউনিট পরীক্ষার ফলাফল কোথায় ধরা হয়েছে? ফলাফল ব্যবহারকারীকে কীভাবে নির্দেশিত হয়?
ব্যবহারকারী 137717

10
হ্যাঁ, @Testস্বরলিপি প্রয়োজন। এটি ইউনিট পরীক্ষা রানারকে সিগন্যাল করার জন্য করা হয় যে এই পদ্ধতিটি ইউনিট পরীক্ষার প্রতিনিধিত্ব করে এবং সম্পাদন করা উচিত। যে পদ্ধতিগুলির সাথে টিকা @Testদেওয়া হয় না সেগুলি পরীক্ষক দ্বারা চালানো হয় না।
আলী শাহ আহমেদ

দ্বিতীয় পরীক্ষার জন্য - কেবল আপনাকে দেওয়ার nullজন্য একটি যুক্ত করা উচিত নয় ? yy
অদজিৎ

ধন্যবাদ! আমি জানতে চাইছি কেন staticপরীক্ষা পদ্ধতির সংশোধকটিতে যুক্ত করার দরকার নেই ।
লিয়াং জাং

103

আমি এই পোস্টটি ইন্টেলিজ এবং গ্রহন উভয়ের জন্য সরবরাহ করি ।

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- ওকে ক্লিক করুন।

JUnit যোগ করুন

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- প্যাকেজ এক্সপ্লোরারটিতে আপনার পরীক্ষার ক্লাসে ক্লিক করুন এবং রান হিসাবে -> জুনিত পরীক্ষায় ক্লিক করুন।

JUnit পরীক্ষা চালান

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 এ দেখতে পারেন ।


12
আপনার উত্তরটি ভালবাসুন, এটি সেরা "কীভাবে"!
অ্যালিসা

4
আমার উত্তর সহায়ক ছিল বলে আমি আনন্দিত। আপনার মন্তব্যের জন্য ধন্যবাদ.
মোহাম্মদ

1
টিউটোরিয়ালগুলির মতো দেখতে এটি হওয়া উচিত; পরিষ্কার, সংক্ষিপ্ত, সম্পূর্ণ উদাহরণ। খুব ভালো.
জ্যাক অফ ব্লেডস

1
আপনাকে অনেক ধন্যবাদ জ্যাক। আপনি এটি সহায়ক বলে আমি খুশি।
মোহাম্মদ

18

এটি একটি খুব সাধারণ প্রশ্ন এবং এর উত্তর দেওয়ার অনেক উপায় রয়েছে।

আপনি যদি পরীক্ষাগুলি তৈরি করতে JUnit ব্যবহার করতে চান, আপনার নিজের টেস্টকেস ক্লাস তৈরি করতে হবে, তারপরে পৃথক পরীক্ষার পদ্ধতিগুলি তৈরি করুন যা পরীক্ষার অধীনে আপনার শ্রেণি / মডিউলের নির্দিষ্ট কার্যকারিতা পরীক্ষা করে (একক টেস্টকেস ক্লাস সাধারণত একটি একক "উত্পাদন" শ্রেণীর সাথে জড়িত থাকে) পরীক্ষা করা হচ্ছে) এবং এই পদ্ধতির অভ্যন্তরে বিভিন্ন ক্রিয়াকলাপ চালানো হয় এবং ফলাফলগুলির সাথে তুলনা করুন যা সঠিক হবে। যতটা সম্ভব কোণার কেস চেষ্টা করা এবং আচ্ছাদন করা বিশেষত গুরুত্বপূর্ণ।

আপনার নির্দিষ্ট উদাহরণে, আপনি উদাহরণস্বরূপ নিম্নলিখিত পরীক্ষা করতে পারেন:

  1. দুটি ধনাত্মক সংখ্যার মধ্যে একটি সাধারণ সংযোজন। এগুলি যুক্ত করুন, তারপরে ফলাফলটি যা প্রত্যাশা করবেন তা যাচাই করুন।
  2. ধনাত্মক এবং aণাত্মক সংখ্যার মধ্যে সংযোজন (যা প্রথম যুক্তির চিহ্ন সহ একটি ফলাফল দেয়)।
  3. ধনাত্মক এবং aণাত্মক সংখ্যার মধ্যে সংযোজন (যা দ্বিতীয় তর্কের চিহ্ন সহ ফল দেয়)।
  4. দুটি নেতিবাচক সংখ্যার মধ্যে একটি সংযোজন।
  5. একটি সংযোজন যার ফলে একটি ওভারফ্লো হয়।

ফলাফল যাচাই করতে, আপনি 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() { ... }
}

আপনি যদি ইউনিট পরীক্ষা লিখতে অভ্যস্ত না হন তবে পরিবর্তে আপনার কোডটি অ্যাড-হক পরীক্ষা করে পরীক্ষা করেন যা আপনি "দৃষ্টিভঙ্গি" যাচাই করেছেন (উদাহরণস্বরূপ, আপনি একটি সাধারণ মূল পদ্ধতি লিখেন যা কীবোর্ড ব্যবহার করে প্রবেশ করা আর্গুমেন্ট গ্রহণ করে এবং ফলাফলগুলি মুদ্রণ করে - এবং তারপরে আপনি মানগুলি প্রবেশ করিয়েছেন এবং ফলাফলগুলি সঠিক হলে নিজেকে বৈধ করে তোলেন), তবে আপনি উপরের ফর্ম্যাটে এই জাতীয় পরীক্ষা করে লিখে নিজেই না করে সঠিক অ্যাসেটরএক্সএক্সএক্স পদ্ধতিতে ফলাফলগুলি বৈধ করে শুরু করতে পারেন। এইভাবে, আপনি যদি ম্যানুয়াল টেস্টগুলি করতে হয় তবে আপনি পরীক্ষাটি আবার খুব সহজে চালাতে পারবেন।


8

ভালো লেগেছে @CoolBeans উল্লেখ করা হয়েছে, কটাক্ষপাত করা jUnit । এখানে আপনাকে জুনিত 4.x দিয়ে শুরু করার জন্য একটি ছোট টিউটোরিয়াল দেওয়া আছে

পরিশেষে, আপনি যদি সত্যিই টেস্টিং এবং টেস্ট-চালিত বিকাশ (টিডিডি) সম্পর্কে আরও জানতে চান তবে আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি কেন্ট বেকের নিম্নলিখিত বইটি একবার দেখে নিন: উদাহরণ অনুসারে টেস্ট-চালিত বিকাশ


6

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

  • পরীক্ষা (সমস্ত ধরণের সমস্ত ধরণের বিষয়) কোনও কিছুর আসল আচরণের (সিস্টেমের আন্ডার টেস্ট, এসইউটি) এর প্রত্যাশিত আচরণের সাথে তুলনা করে ।

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

  • কোন প্রোগ্রাম বা কোনও প্রোগ্রামের অংশ (একটি শ্রেণি বা পদ্ধতি) এর প্রত্যাশা করা হয় তা এর স্পেসিফিকেশন । টেস্টিং সফ্টওয়্যার সুতরাং আপনার প্রয়োজন এসইউটি জন্য একটি স্পেসিফিকেশন। এটি সুস্পষ্ট বিবরণ হতে পারে, বা যা আশা করা হয় তার মধ্যে আপনার অন্তর্নিহিত স্পেসিফিকেশন is

  • স্বয়ংক্রিয় ইউনিট পরীক্ষার জন্য আপনি যে শ্রেণী বা পদ্ধতিটি পরীক্ষা করছেন তার একটি সুনির্দিষ্ট এবং দ্ব্যর্থহীন স্পেসিফিকেশন প্রয়োজন।

  • আপনি যখন সেই কোডটি লেখার উদ্দেশ্যে যাত্রা করেছিলেন তখন আপনার সেই স্পেসিফিকেশনটির দরকার ছিল। সুতরাং টেস্টিংয়ের অংশটি আসলে এসইউটির এমনকি একটি লাইন লেখার আগেই শুরু হয়। টেস্ট ড্রাইভেন ডেভলপমেন্টের (টিডিডি) পরীক্ষার কৌশলটি সেই ধারণাটিকে এক চূড়ান্ত পর্যায়ে নিয়ে যায় এবং কোডটি পরীক্ষার আগে আপনি লেখার আগে আপনি ইউনিট টেস্টিং কোড তৈরি করেছেন।

  • ইউনিট অবকাঠামো পরীক্ষা ব্যবহার করে আপনার SUT পরীক্ষা গবেষকেরা । একটি দৃser়তা একটি লজিক্যাল এক্সপ্রেশন ( booleanফলাফলের ধরণের একটি এক্সপ্রেশন ; একটি প্রিকিকেট ) যা trueএসইউটি সঠিকভাবে আচরণ করছে কিনা তা অবশ্যই। স্পেসিফিকেশন অবশ্যই যুক্তি হিসাবে প্রকাশ করা (বা পুনরায় প্রকাশ করা) আবশ্যক।

  • জোর হিসাবে চুক্তি দ্বারা প্রোগ্রামিং হয় হিসাবে একটি স্পেসিফিকেশন প্রকাশ করার জন্য একটি দরকারী কৌশল । এই স্পেসিফিকেশন পোস্টকন্ডিশনের শর্তাবলী । কোনও পোস্টকন্ডিশন হ'ল কোনও পদ্ধতি বা কনস্ট্রাক্টর থেকে ফিরে আসার পরে SUT এর সর্বজনীনভাবে দৃশ্যমান স্থিতির বিষয়ে একটি দাবি। কিছু পদ্ধতি postconditions যে আছে invariants , যা predicates আগে এবং পদ্ধতি কার্যকর পর পূর্ণ করেছে। কোনও শ্রেণিকে আক্রমণকারীও বলা যেতে পারে, যা শ্রেণীর প্রতিটি নির্মাতা এবং পদ্ধতির পোস্টকন্ডিশন এবং তাই সর্বদা সত্য হওয়া উচিত । পোস্টকন্ডিশনগুলি (এবং আক্রমণকারীরা) কেবল প্রচারের দৃশ্যমান রাষ্ট্রের ক্ষেত্রে প্রকাশ করা হয়: publicএবং protectedক্ষেত্রগুলি, ফেরত দেওয়া মানগুলি দ্বারা ফেরতpublicএবং protectedপদ্ধতিগুলি (যেমন গেটার্স) এবং অবজেক্টগুলির সর্বজনীনভাবে দৃশ্যমান স্থিতিগুলি (রেফারেন্স দ্বারা) পদ্ধতিগুলিতে পাস হয়।


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

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