আমি কীভাবে মকিতো এবং জুনিত 5 এর সাথে ইঞ্জেকশনটি ব্যবহার করতে পারি?
JUnit4 এ আমি টীকাটি ব্যবহার করতে পারি @RunWith(MockitoJUnitRunner.class)। JUnit5 এ কোনও @RunWithটিকা নেই?
আমি কীভাবে মকিতো এবং জুনিত 5 এর সাথে ইঞ্জেকশনটি ব্যবহার করতে পারি?
JUnit4 এ আমি টীকাটি ব্যবহার করতে পারি @RunWith(MockitoJUnitRunner.class)। JUnit5 এ কোনও @RunWithটিকা নেই?
উত্তর:
মকিটো ব্যবহারের বিভিন্ন উপায় রয়েছে - আমি একে একে তাদের মাধ্যমে যাব।
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এবং মকিতো রানার ব্যবহার করা যাবে না।
@Testপ্রয়োজনীয়তার সাথে বর্ণিত পদ্ধতিটি কী সর্বজনীন বা "প্যাকেজ ব্যক্তিগত" যথেষ্ট প্রয়োজন?
মকিতো ব্যবহার করুন 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
...
}
@ExtendWith(MockitoExtension.class)@RunWith(MockitoJUnitRunner.class)JUnit4 এর সমতুল্য
করার বিভিন্ন উপায় রয়েছে তবে ক্লিনার উপায় এবং এটি সম্মান জানায় 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 সংস্করণে উপস্থিত রয়েছে বলে মনে হয় না ।
mockito-junit-jupiter
আপনাকে নতুন @ExtendWithটিকাটি ব্যবহার করতে হবে ।
দুর্ভাগ্যক্রমে এখনও কোন এক্সটেনশন এখনও মুক্তি হয়নি। উপর GitHub আপনি এক্সটেনশানটি জন্য একটি বিটা বাস্তবায়ন দেখতে পারেন। একটি উদাহরণ হিসাবে ডেমো পরীক্ষা ।