JUnit5 এর সাথে মকিতো কীভাবে ব্যবহার করবেন


108

আমি কীভাবে মকিতো এবং জুনিত 5 এর সাথে ইঞ্জেকশনটি ব্যবহার করতে পারি?

JUnit4 এ আমি টীকাটি ব্যবহার করতে পারি @RunWith(MockitoJUnitRunner.class)। JUnit5 এ কোনও @RunWithটিকা নেই?

উত্তর:


152

মকিটো ব্যবহারের বিভিন্ন উপায় রয়েছে - আমি একে একে তাদের মাধ্যমে যাব।

ম্যানুয়ালি

Mockito::mockJUnit সংস্করণ নির্বিশেষে (বা বিষয়টির জন্য পরীক্ষার কাঠামো) নির্বিশেষে ম্যানুয়ালি ম্যাক তৈরি করা ।

টীকাগুলি ভিত্তিক

ব্যবহার @Mock -annotation এবং সংশ্লিষ্ট কল MockitoAnnotations::initMocks করার ঠাট্টা তৈরি JUnit সংস্করণ নির্বিশেষে কাজ করে (অথবা যে বিষয়টি জন্য পরীক্ষা ফ্রেমওয়ার্ক কিন্তু পরীক্ষা কোড একটি মডিউলে শেষ পর্যন্ত থাকুক বা না থাকুক জাভা 9 এখানে হস্তক্ষেপ করতে পারে, উপর নির্ভর করে)।

মকিতো এক্সটেনশন

JUnit 5 এর একটি শক্তিশালী এক্সটেনশন মডেল রয়েছে এবং সম্প্রতি মকিতো গ্রুপ / আর্টিফ্যাক্ট আইডি org.mockito এর অধীনে একটি প্রকাশ করেছে : মকিতো-জুনিট-বৃহস্পতি

আপনি @ExtendWith(MockitoExtension.class)পরীক্ষার ক্লাসে যোগ করে এবং এর সাথে বিদ্রূপের ক্ষেত্রগুলি টিকা দিয়ে এক্সটেনশনটি প্রয়োগ করতে পারেন @Mock। থেকে MockitoExtensionএর JavaDoc:

@ExtendWith(MockitoExtension.class)
public class ExampleTest {

    @Mock
    private List list;

    @Test
    public void shouldDoSomething() {
        list.add(100);
    }

}

মকিটো এক্সটেনশন ডকুমেন্টেশনটি মকগুলি ইনস্ট্যান্ট করার অন্যান্য উপায়গুলি বর্ণনা করে, উদাহরণস্বরূপ কনস্ট্রাক্টর ইনজেকশন সহ (যদি আপনি পরীক্ষার ক্লাসে চূড়ান্ত ক্ষেত্রগুলি rpefer করেন)।

কোনও নিয়ম নেই, রানার নেই

JUnit 4 নিয়ম এবং রানাররা 5 ইউনাইট 5 এ কাজ করে না, সুতরাং MockitoRuleএবং মকিতো রানার ব্যবহার করা যাবে না।


6
এখন একটি অফিসিয়াল মকিতো জুনিট 5 এক্সটেনশন যা মকিতোজেট ইউনিটআরনারের সমান -> মকিতো-জুনিট-বৃহস্পতি
ড্যান কার্টার

মকিতোর আনুষ্ঠানিক বর্ধন যখন প্রকাশ করা হয়েছিল, কীভাবে এটির কনফিগার ও ব্যবহার করতে হয় তার আরও বিশদ সহ একটি ব্লগ পোস্ট লিখেছিলেন: solidsoft.wordpress.com/2018/03/27/…
মার্সিন

@Testপ্রয়োজনীয়তার সাথে বর্ণিত পদ্ধতিটি কী সর্বজনীন বা "প্যাকেজ ব্যক্তিগত" যথেষ্ট প্রয়োজন?
গীক

বৃহস্পতির সাথে পরীক্ষা চালানোর সময় (প্রায়শই "JUnit 5" হিসাবে পরিচিত), পরীক্ষার পদ্ধতিগুলি কেবল প্যাকেজ-দৃশ্যমান হওয়া দরকার।
নিকোলাই পার্লগ

60

মকিতো ব্যবহার করুন MockitoExtension। এক্সটেনশানটি একটি নতুন শৈল্পিক উপাদানটিতে রয়েছে mockito-junit-jupiter:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-junit-jupiter</artifactId>
    <version>2.23.4</version>
    <scope>test</scope>
</dependency>

এটি আপনাকে পরীক্ষার লেখার অনুমতি দেয় যেমন আপনি ইউনাইট 4 এর সাথে থাকবেন:

import org.mockito.junit.jupiter.MockitoExtension;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;

@ExtendWith(MockitoExtension.class)
class MyTest {

    @Mock
    private Foo foo;

    @InjectMocks
    private Bar bar; // constructor injection

    ...
}

7
@ExtendWith(MockitoExtension.class)@RunWith(MockitoJUnitRunner.class)JUnit4 এর সমতুল্য
সের্গেই

আমি কি JUnit5 এ মকিতোএক্সটেনশন.ক্লাস ব্যবহার করে মক অবজেক্টের পদ্ধতিতে বিভিন্ন রিটার্ন মান সহ পদ্ধতির একাধিক কল করতে পারি
রাজ হাসানী

@ রাজহাসানী হ্যাঁ আপনি এখানে দেখতে পারেন ।
জোনাথন

10

করার বিভিন্ন উপায় রয়েছে তবে ক্লিনার উপায় এবং এটি সম্মান জানায় 5 ইউনিত 5 দর্শনের org.junit.jupiter.api.extension.Extensionজন্য মকিতো তৈরি করছে ।

1) নিজেই উপশহর তৈরি করা আপনার কাঠামোর সঠিকভাবে ব্যবহার নিশ্চিত করার জন্য অতিরিক্ত মকিতো চেকগুলির সুবিধা হারাবে।

2) MockitoAnnotations.initMocks(this)প্রতিটি পরীক্ষার ক্লাসে কল করা বয়লার প্লেট কোড যা আমরা এড়াতে পারি।
এবং একটি বিমূর্ত শ্রেণিতে এই সেটআপ করা ভাল সমাধান নয়।
এটি প্রতিটি পরীক্ষার ক্লাসকে বেস ক্লাসে জোড়া দেয়।
তারপরে যদি আপনার ভাল কারণগুলির জন্য নতুন বেস পরীক্ষা ক্লাসের প্রয়োজন হয় তবে আপনি একটি 3-স্তর শ্রেণির শ্রেণিবিন্যাস দিয়ে শেষ করেন। দয়া করে তা এড়িয়ে যান।

3) পরীক্ষার বিধিগুলি একটি JUnit 4 নির্দিষ্টতা।
এমনকি ভাবেন না।
এবং ডকুমেন্টেশন এ সম্পর্কে পরিষ্কার:

তবে আপনি JUnit 5 এর জন্য একটি নতুন এক্সটেনশান বিকাশ করতে চাইলে দয়া করে JUnit 4 এর নিয়ম-ভিত্তিক মডেলের পরিবর্তে জুনিট বৃহস্পতির নতুন এক্সটেনশন মডেলটি ব্যবহার করুন।

4) টেস্ট রানার সত্যই JUnit 5 কাঠামো প্রসারিত করার উপায় নয়।
JUnit 5 JUnit 5 এক্সটেনশনগুলির জন্য ধন্যবাদ পরীক্ষার লেখার জন্য একটি এক্সটেনশন মডেল সরবরাহ করে 4 জুনার রানারদের জাহান্নামকে সরল করেছে।
এমনকি ভাবেন না।

সুতরাং org.junit.jupiter.api.extension.Extensionউপায় পক্ষে ।


সম্পাদনা: প্রকৃতপক্ষে, মকিতো একটি বৃহস্পতি সম্প্রসারণকে বান্ডিল করেছে: mockito-junit-jupiter

তারপরে, ব্যবহার করা খুব সহজ:

import org.mockito.junit.jupiter.MockitoExtension;

@ExtendWith(MockitoExtension.class)
public class FooTest {
     ...    
}

এখানে জোনাথনের দুর্দান্ত উত্তরের একটি সংযোজন দেওয়া হল।

নির্ভরযোগ্যতা হিসাবে mockito-junit-jupiterশৈল্পিক @ExtendWith(MockitoExtension.class)হিসাবে যুক্ত করে, পরীক্ষাটি কার্যকর করা হিসাবে নিম্নলিখিত ব্যতিক্রম উত্পাদন ব্যবহার :

java.lang.NoSuchMethodError: org.junit.platform.commons.support.AnnotationSupport.findAnnotation (Ljava / Use / Optional; Ljava / lang / Class;) Ljava / ইউজার / ptionচ্ছিক;

আপনার সমস্যাটি mockito-junit-jupiterদুটি স্বতন্ত্র গ্রন্থাগারের উপর নির্ভর করে। উদাহরণস্বরূপ mockito-junit-jupiter:2.19.0:

<dependency>
  <groupId>org.mockito</groupId>
  <artifactId>mockito-core</artifactId>
  <version>2.19.0</version>
  <scope>compile</scope>
</dependency>
<dependency>
  <groupId>org.junit.jupiter</groupId>
  <artifactId>junit-jupiter-api</artifactId>
  <version>5.1.0</version>
  <scope>runtime</scope>
</dependency>

সমস্যা আমি ব্যবহার করা হয়েছিল junit-jupiter-api:5.0.1

সুতরাং হিসাবে junit-jupiter-apiAPI- এর পরিপ্রেক্ষিতে এখনও প্রায়ই প্যাচসমূহ, আপনি একই সংস্করণের উপর নির্ভর করে করা junit-jupiter-apiযে mockito-junit-jupiterউপর নির্ভর করে।


কেন mockito-junit-jupiterসঠিক সংস্করণ টান না junit-jupiter-api?
হেলিক্স

@ হেলিক্স কারণ এই নির্ভরতার জন্য ব্যবহৃত সংস্করণ কৌশলটি মকিতো লাইব্রেরিতে নির্ভর করে। সংস্করণটি এখানে দেখুন mockito-junit-jupiter:2.19.0। JUnit বৃহস্পতি সংস্করণ দিয়ে শুরু হয় 5। মকিতো-জুনিট-বৃহস্পতির জিনিসপত্রকে পরিষ্কার করার জন্য তার আর্টিক্ট আইডেন্টিফায়ারটিতে দুটি জিনিস (মকিতো সংস্করণ এবং জুনিত বৃহস্পতি সংস্করণ) নির্দিষ্ট করা উচিত। উদাহরণস্বরূপ mockito-junit-jupiter-5.1:2.19.0বোঝাতে যে লাইব্রেরিটি ইউনিত বৃহস্পতি 5.1 এর জন্য ডিজাইন করা হয়েছে।
ডেভিডএক্সএক্সএক্সএক্স

MockitoExtensionmockito-core3.0.0 সংস্করণে উপস্থিত রয়েছে বলে মনে হয় না ।
থান্ডারফোরজ

4
@ থান্ডারফোর্জে এটি সংজ্ঞায়িত করা হয়েছেmockito-junit-jupiter
ডেভিডএক্সএক্সএক্সএক্স

3

আপনাকে নতুন @ExtendWithটিকাটি ব্যবহার করতে হবে ।

দুর্ভাগ্যক্রমে এখনও কোন এক্সটেনশন এখনও মুক্তি হয়নি। উপর GitHub আপনি এক্সটেনশানটি জন্য একটি বিটা বাস্তবায়ন দেখতে পারেন। একটি উদাহরণ হিসাবে ডেমো পরীক্ষা

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