জুনিট @ রুল কীভাবে কাজ করে?


195

আমি প্রচুর কোডের জন্য পরীক্ষার কেসগুলি লিখতে চাই, আমি JUnit @Ruleটীকা সংক্রান্ত বৈশিষ্ট্যটির বিশদ জানতে চাই , যাতে পরীক্ষার কেসগুলি লেখার জন্য আমি এটি ব্যবহার করতে পারি। দয়া করে কিছু ভাল উত্তর বা লিঙ্ক সরবরাহ করুন, যা একটি সাধারণ উদাহরণের মাধ্যমে এর কার্যকারিতার বিশদ বিবরণ দেয়।


আমি ইতিমধ্যে এই লিঙ্কটি দিয়ে গেছি http://cwd.dhemery.com/2011/01/
দীপক

আমি এই নিবন্ধটি আরও@Rule ভালভাবে ব্যাখ্যা করেছি, বিশেষ করে শেষ বিভাগটি "বিস্তারিত ঘটনাগুলির ধারাবাহিকতা" দেখুন
পিটার পেরি

আমি মনে করি এটি ইঞ্জেকশনের ধারণার অনুরূপ, আমি কি ঠিক আছি?
চাও

যে লিঙ্ক ভাগ করার জন্য ধন্যবাদ। একটি জিনিস পরিষ্কার হয় না। ডিফল্ট স্টেটমেন্ট। মূল্যায়ন () কখন ডাকা হবে? এটি কি সমস্ত নিয়মের মূল্যায়ন () পূর্বে বা সেগুলি পরে বলা হয়? আমি তাদের সব পরে অনুমান করছি।
মাস্টারজয়ে

@ testerjoe2 আপনি ডিফল্ট বিবৃতি সম্পূর্ণ উপেক্ষা করতে পছন্দ করতে পারেন। আপনি এটিতে প্রতিনিধি বাছাই করতে পারেন বা আপনি কেবল নিজের কোনও বিবৃতি দিয়ে একে একে পুরোপুরি প্রতিস্থাপন করতে পারেন। এটা না বলা পেতে , আপনি এটা ভালো না কল করতে পারেন। এটি 10 ​​পয়েন্টে ছিল: "স্ক্রিনশট বিবৃতিটির মূল্যায়ন () পদ্ধতিটি ডিফল্ট বিবৃতিটির মূল্যায়ন () পদ্ধতিটিকে কল করে" "
পিটার পেরে

উত্তর:


155

নিয়মগুলি অতিরিক্ত কার্যকারিতা যুক্ত করতে ব্যবহৃত হয় যা পরীক্ষার শ্রেণীর মধ্যে সমস্ত পরীক্ষার জন্য প্রযোজ্য তবে আরও সাধারণ উপায়ে।

উদাহরণস্বরূপ, বহিরাগত রিসোর্স কোনও পরীক্ষার পদ্ধতির আগে এবং পরে কোড ব্যবহার করে @Beforeএবং না করেই চালায় @After। এর ExternalResourceপরিবর্তে ব্যবহার করা @Beforeএবং @Afterআরও ভাল কোড পুনরায় ব্যবহারের সুযোগ দেয়; একই নিয়ম দুটি পৃথক পরীক্ষার ক্লাস থেকে ব্যবহার করা যেতে পারে।

নকশাটি এর উপর ভিত্তি করে ছিল: ইউনাইটে ইন্টারসেপ্টর

আরও তথ্যের জন্য JUnit উইকি: বিধিগুলি দেখুন


1
সংশোধন: "উদাহরণস্বরূপ, এক্সটার্নাল রিসোর্স পরীক্ষার ক্লাসের আগে এবং পরে কোড চালায় ।" এক্সটার্নাল রিসোর্স পরীক্ষার মধ্যে চলতে পেতে প্রয়োগ () প্রয়োগ করার কিছু আছে।
derekm

62

জুনিট বিধিগুলি এওপি (দিক ভিত্তিক প্রোগ্রামিং) এর নীতিতে কাজ করে। এটি পরীক্ষার পদ্ধতিটিকে বাধা দেয় যাতে কোনও নির্দিষ্ট পরীক্ষা পদ্ধতি কার্যকর করার আগে বা পরে কিছু স্টাফ করার সুযোগ সরবরাহ করা হয়।

নীচের কোডটির উদাহরণ নিন:

public class JunitRuleTest {

  @Rule
  public TemporaryFolder tempFolder = new TemporaryFolder();

  @Test
  public void testRule() throws IOException {
    File newFolder = tempFolder.newFolder("Temp Folder");
    assertTrue(newFolder.exists());
  }
} 

প্রতিবার উপরোক্ত পরীক্ষার পদ্ধতিটি কার্যকর করার সময় একটি অস্থায়ী ফোল্ডার তৈরি করা হয় এবং পদ্ধতিটি কার্যকর হওয়ার পরে এটি মুছে ফেলা হয়। এটি জুনিত দ্বারা প্রদত্ত একটি আউট অফ-বক্স নিয়মের একটি উদাহরণ।

আমাদের নিজস্ব নিয়ম তৈরি করেও অনুরূপ আচরণ অর্জন করা যেতে পারে। জুনিট টেস্টরুল ইন্টারফেস সরবরাহ করে, যা আমাদের নিজস্ব জুনিট বিধি তৈরি করতে প্রয়োগ করা যেতে পারে।

রেফারেন্সের জন্য এখানে একটি দরকারী লিঙ্ক:


4
সুতরাং এটি মুছে ফেলতে / অবজেক্টটি সাফ করার জন্য কোনও কোড না লিখে মুছে ফেলা হবে?
Dror

github.com/ জুনit - team / junit4 / blob / master / src / main / java / org / এর উত্স দেখুন , ফোল্ডারটি পূর্বে () কলব্যাক পদ্ধতিতে তৈরি হয়েছিল এবং পরে () কলব্যাক পদ্ধতিতে মুছে ফেলা হয়। ..
পিয়েরলুইগি ভার্নেট্টো

1
টেম্পোরারি ফোল্ডারটি মুছে ফেলা হয় কেন এমন লোকেরা হয়ত বুঝতে পারেন নি যে এটি জুনিট দ্বারা সরবরাহ করা একটি টেম্পোরারি ফোল্ডার যা স্বয়ংক্রিয়ভাবে মুছে ফেলা হয় - অর্থাত্ টেরডাউন স্টেপটি টেম্পোরারিফোল্ডার শ্রেণিরই একটি অংশ।
মাইন্ডোগাস বার্নাটাভিয়াস

17

tl; dr এটি কীভাবে কাজ করে: JUnit আপনার পরীক্ষার পদ্ধতিটি একটি বিবৃতি অবজেক্টে আবৃত করে যাতে বিবৃতি দেয়। এক্সিকিউট () আপনার পরীক্ষা চালায়। তারপরে স্টেটমেন্টকে কল করার পরিবর্তে xএক্সেকিউট () সরাসরি আপনার পরীক্ষা চালানোর জন্য, ইউনিত @ বিধি বর্ণনার সাথে স্টেটমেন্টকে একটি টেস্টরুলে পাস করে। টেস্টরুলের "প্রয়োগ" ফাংশনটি আপনার পরীক্ষার সাথে বিবৃতি দিয়ে একটি নতুন বিবৃতি দেয়। নতুন স্টেটমেন্টের এক্সিকিউট () পদ্ধতিটি পরীক্ষার স্টেটমেন্টের এক্সিকিউট পদ্ধতিটিকে (বা না, বা একাধিকবার কল করতে পারে) কল করতে পারে এবং এর আগে এবং পরে যা ইচ্ছা তা করতে পারে। এখন JUnit এর একটি নতুন স্টেটমেন্ট আছে যা কেবল পরীক্ষা চালানোর চেয়ে আরও বেশি কিছু করে এবং অবশেষে এক্সিকিউটকে ফোন করার আগে এটি আবার কোনও নিয়মে পাস করতে পারে।


2
বিবৃতিতে পদ্ধতি কার্যকর হয় না মূল্যায়ন আছে।
হেমন্ত

0

নিয়মগুলি প্রতিটি পরীক্ষার পদ্ধতির আচরণকে জেনেরিক উপায়ে বাড়ানোর জন্য ব্যবহৃত হয়। জুনিট নিয়ম পরীক্ষা পদ্ধতিটিকে বিরত রাখে এবং পরীক্ষা পদ্ধতি কার্যকর হওয়ার আগে এবং একটি পরীক্ষা পদ্ধতি কার্যকর করার পরে আমাদের কিছু করার অনুমতি দেয়।

উদাহরণস্বরূপ, @ টাইমআউট রুল ব্যবহার করে আমরা সমস্ত পরীক্ষার সময়সীমা নির্ধারণ করতে পারি।

public class TestApp {
    @Rule
    public Timeout globalTimeout = new Timeout(20, TimeUnit.MILLISECONDS);

    ......
    ......

 }

@TemporaryFolder নিয়ম অস্থায়ী ফোল্ডার, ফাইল তৈরি করতে ব্যবহার করা হয়। প্রতিবার পরীক্ষার পদ্ধতিটি কার্যকর করা হলে একটি অস্থায়ী ফোল্ডার তৈরি করা হয় এবং পদ্ধতিটি কার্যকর হওয়ার পরে এটি মুছে ফেলা হয়।

public class TempFolderTest {

 @Rule
 public TemporaryFolder tempFolder= new TemporaryFolder();

 @Test
 public void testTempFolder() throws IOException {
  File folder = tempFolder.newFolder("demos");
  File file = tempFolder.newFile("Hello.txt");

  assertEquals(folder.getName(), "demos");
  assertEquals(file.getName(), "Hello.txt");

 }


}

আপনি এই লিঙ্কটিতে জুনিট দ্বারা প্রদত্ত কিছু অন্তর্নির্মিত নিয়মের উদাহরণ দেখতে পাচ্ছেন ।

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