জাভা জন্য সেরা মক কাঠামো কি? [বন্ধ]


347

জাভাতে মক অবজেক্ট তৈরির সেরা ফ্রেমওয়ার্ক কী? কেন? প্রতিটি কাঠামোর পক্ষে কি কি?

উত্তর:


315

আমি মকিতো ব্যবহার করে ভাল সাফল্য পেয়েছি ।

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

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

এখানে মকিতো হোমপেজ থেকে একটি (সংক্ষিপ্ত) উদাহরণ রয়েছে:

import static org.mockito.Mockito.*;

List mockedList = mock(List.class);
mockedList.clear();
verify(mockedList).clear();

এটি এর চেয়ে সহজ কিছু পায় না।

আমি কেবলমাত্র বড় ক্ষতি সম্পর্কে ভাবতে পারি তা হ'ল এটি স্থির পদ্ধতিগুলিকে ঠাট্টা করবে না।


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

6
আমি ভালবাসি যখন আপনি এমন কিছু করার চেষ্টা করবেন যখন আপনার উচিত হবে না (উদাঃ মোড়গুলি ইনলাইন তৈরি করুন), আপনি ব্যতিক্রম বার্তায় কী ভুল করেছেন তার একটি স্পষ্ট ব্যাখ্যা পাবেন।
ripper234

3
আমার জন্য, একেবারে। আমি এখনও এটি নিঃশর্তভাবে সুপারিশ করব। অবশ্যই, আপনি যদি আরও একটি কাঠামো খুঁজে পান যা আপনার প্রয়োজনগুলি আরও ভালভাবে পূরণ করে, তবে এটি অন্য উত্তরে উল্লেখ করুন এবং দেখুন কী ভোট পাবে এবং কী ধরণের মন্তব্য তা গ্রহণ করবে।
ব্রায়ান ল্যাফ্রাম্বোয়েস

2
@ মেক্সিকানহ্যাকার আপনি এন্ড্রয়েডের জন্য কেন ব্যবহার করতে পারেন নি? আমি এখনই এটি ব্যবহার করছি, রোবলেট্রিকের সাথে।
ইলক্কা

2
আমি মকিতো ব্যবহার করছি এবং এটি ভালবাসি !! দুর্দান্ত ডকুমেন্টেশনও (এই গুণটির ডকুমেন্টেশনগুলি খুঁজে পাওয়া বিরল, লেখকদের কাছ থেকে ভাল চাকরি), যা ফ্রেমওয়ার্কের কোডটি খনন না করে স্টাফ ব্যবহার করা আমাদের পক্ষে এত গুরুত্বপূর্ণ !!!
রেনাতো

84

আমি পাওয়ারমকের স্রষ্টা তাই স্পষ্টতই আমার এটি সুপারিশ করতে হবে! :-)

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

পাওয়ারমক অন্য ফ্রেমওয়ার্কগুলি প্রতিস্থাপনের উদ্দেশ্যে নয়, বরং অন্যান্য কৌশলগুলি যখন ঠাট্টা-বিদ্রূপের অনুমতি দেয় না তখন এটি জটিল পরিস্থিতিতে ব্যবহার করা যেতে পারে। পাওয়ারমকটিতে অন্যান্য কার্যকর বৈশিষ্ট্যও রয়েছে যেমন স্ট্যাটিক ইনিশিয়ালাইজার এবং কনস্ট্রাক্টর দমন করা


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

@ জ্যান কেবল ইস্যুটি হ'ল পাওয়ারমকটি রোবলেট্রিক ব্যবহার করার সময় বেমানান যদিও :-( আমি @ রুনউইথ (পাওয়ারমকআরনারক্লাস) এবং @ রুনউইথ (রোবলেক্ট্রিকটেষ্টার্নার.ক্লাস) করতে চাই
ব্লুন্ডেল

গত কয়েক মাস ধরে পাওয়ারমক ব্যবহারের পরে আমি আন্তরিকভাবে এটির প্রস্তাব দিচ্ছি!
cwash

পাওয়ারমক সত্যিই দুর্দান্ত। আমি সমস্ত কিছু অ্যাক্সেস করতে স্ট্যাটিক সিলেটলেটগুলি সত্যিই পছন্দ করি এবং এটি পরীক্ষা করা সম্ভব করে।
ইয়ান ম্যাকালিনাও

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

46

JMockit প্রকল্পের সাইটে বর্তমান বিদ্রূপকারী টুলকিট জন্য তুলনামূলক তথ্য প্রচুর রয়েছে।

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


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

21

আমি জেমকিতের সাথে সাফল্য পেয়েছি

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

import mockit.Mockit;

...
Mockit.redefineMethods(MyClassWithStaticInit.class,
                       MyReplacementClass.class);
...
class MyReplacementClass {
  public void $init() {...} // replace default constructor
  public static void $clinit{...} // replace static initializer
  public static void myStatic{...} // replace static method
  // etc...
}

এটিতে একটি প্রত্যাশা ইন্টারফেস রয়েছে যা রেকর্ড / প্লেব্যাকের পরিস্থিতিতেও অনুমতি দেয়:

import mockit.Expectations;
import org.testng.annotations.Test;

public class ExpecationsTest {
  private MyClass obj;

  @Test
  public void testFoo() {
    new Expectations(true) {
      MyClass c;
      {
        obj = c;
        invokeReturning(c.getFoo("foo", false), "bas");
      }
    };

    assert "bas".equals(obj.getFoo("foo", false));

    Expectations.assertSatisfied();
  }

  public static class MyClass {
    public String getFoo(String str, boolean bool) {
      if (bool) {
        return "foo";
      } else {
        return "bar";
      }
    }
  }
}

খারাপ দিকটি এটির জন্য জাভা 5/6 প্রয়োজন।


হ্যাঁ, এটি সত্যিই সুপারিশ করতে পারে
এপাগা

7
কেবলমাত্র একটি আপডেট: জেমকিত প্রকল্প কোড . google.com/p/jmockit এ সরানো হয়েছে । এটি এই পোস্টের (এবং এখনও বিকশিত হচ্ছে) সাল থেকে এটি অনেকটা বিকশিত হয়েছে এবং এখন তার বিস্তৃত ডকুমেন্টেশন রয়েছে।
Rogério

জেমকিত আবার সরে গেছে। এটি এখন গিথুব এ উপলব্ধ। jmockit.github.io
রবি

15

গ্রোভিকে ব্যবহার করে আপনিও পরীক্ষা করতে পারেন। গ্রোভিতে আপনি 'হিসাবে' অপারেটরটি ব্যবহার করে জাভা ইন্টারফেসগুলি সহজেই উপহাস করতে পারেন:

def request = [isUserInRole: { roleName -> roleName == "testRole"}] as HttpServletRequest 

এই বেসিক কার্যকারিতা ছাড়াও গ্রোভি শক্তিশালী MockForএবং StubForশ্রেণি সহ মজাদার ফ্রন্টে আরও অনেক কিছু সরবরাহ করে ।

http://docs.codehaus.org/display/GROOVY/Groovy+Mocks


13

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

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

আমি জেএমকিতকে এক ঝলক দেখেছি সাম্প্রতিক , এবং বৈশিষ্ট্যগুলির লন্ড্রি তালিকা বেশ বিস্তৃত হলেও, আমি মনে করি যে এর দাম ফলাফলের কোডের সুসংগঠন, এবং আরও লিখতে হবে।

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

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


1
+1 এই উত্তরের আরও বেশি অগ্রগতি প্রয়োজন। তাদের ফ্রেমওয়ার্ক সম্পর্কে তারা আসলে যা পছন্দ করেছে তা না ভাগ করে নেওয়া উচিত। কেবল "আমি এটি ব্যবহার করেছি .. এবং আমি এটি পছন্দ করেছি!" এই ধরণের ভাল প্রশ্নগুলি এসও-তে বন্ধ হওয়ার অন্যতম কারণ।
রবি থাপলিয়াল

11

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


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

ইজিমক শুধুমাত্র জাভা 5 এবং উপরের উপর কাজ করে, আরে!
ম্যাট বি

8

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


6

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



4

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

উদাহরণস্বরূপ, কোনও ধনাত্মক সংখ্যা এন স্কোয়ারের বর্গমূল n এর সমান কিনা তা দেখতে নিম্নলিখিত সম্পত্তিটি ম্যাথ.এসকিআরটি পদ্ধতিটি পরীক্ষা করে।

val propSqrt = forAll { (n: Int) => (n >= 0) ==> scala.Math.sqrt(n*n) == n }

আপনি যখন কল করবেন তখন propSqrt.check()স্কালাচেক কয়েকশ সংখ্যক পূর্ণসংখ্যার উত্পন্ন করে এবং প্রত্যেকের জন্য আপনার সম্পত্তি চেক করে, স্বয়ংক্রিয়ভাবে নিশ্চিত হয়ে নিন যে প্রান্তের কেসগুলি ভালভাবে আচ্ছাদিত রয়েছে।

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


3

মকিতো স্টিবিং পদ্ধতিগুলি, ম্যাচিং আর্গুমেন্টগুলির (যেমন কোনও আইন্ট () এবং যে কোনও স্ট্রিং ()) সরবরাহ করতে পারে, অনুরোধের সংখ্যা যাচাই করে (বার (3), লাস্টস্ট ইন (), কখনই না ()) এবং আরও অনেক কিছু করে

আমি এটিও পেয়েছি যে মকিতো সহজ এবং পরিষ্কার

মকিতো সম্পর্কে একটি জিনিস আমি পছন্দ করি না তা হ'ল আপনি স্থির পদ্ধতিগুলিকে হঠাতে পারবেন না


এই উত্তরটি সঠিক নয়। আপনি jMock এর সাথে ইন্টারফেসের মধ্যে সীমাবদ্ধ নন। আপনি ClassImposteriser দিয়ে কংক্রিটের ক্লাসগুলি উপহাস করতে পারেন।
টেলিফোন টেড

আপনি ইজিমোকের সাথেও ঠিক একই জিনিস করতে পারেন।
সেম ক্যাটিকাস

আমি আমার উত্তর থেকে ভুলত্রুটি সরিয়েছি।
জোশ ব্রাউন

2

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


1

আমি জেএমকের মাধ্যমে উপহাসগুলি ব্যবহার শুরু করেছি, তবে শেষ পর্যন্ত ইজিমক ব্যবহার করতে রূপান্তরিত হয়েছি। ইজিমকটি কেবল --easier-- ছিল এবং এমন একটি সিনট্যাক্স সরবরাহ করেছিল যা আরও প্রাকৃতিক অনুভূত হয়েছিল। আমি তখন থেকে পরিবর্তন করিনি।

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