উত্তর:
সরল মকিতো গ্রন্থাগার
import org.mockito.Mock;
...
@Mock
MyService myservice;
এবং
import org.mockito.Mockito;
...
MyService myservice = Mockito.mock(MyService.class);
মকিতো গ্রন্থাগার থেকে আসা এবং কার্যত সমতুল্য।
তারা কোনও শ্রেণি বা একটি ইন্টারফেসকে বিদ্রূপ করার এবং এটিতে আচরণ রেকর্ড এবং যাচাই করার অনুমতি দেয়।
টীকাটি ব্যবহারের উপায়টি ছোট, তাই বেশি পছন্দনীয় এবং প্রায়শই পছন্দনীয়।
নোট করুন যে পরীক্ষার মৃত্যুদণ্ডের সময় মকিতো টিকাগুলি সক্ষম করতে,
MockitoAnnotations.initMocks(this)
স্থির পদ্ধতিটি কল করতে হবে।
পরীক্ষার মধ্যে পার্শ্ব প্রতিক্রিয়া এড়াতে, প্রতিটি পরীক্ষার মৃত্যুর আগে এটি করার পরামর্শ দেওয়া হয়:
@Before
public void initMocks() {
MockitoAnnotations.initMocks(this);
}
মকিতো টীকাগুলি সক্ষম করার আরেকটি উপায় হ'ল পরীক্ষাটি ক্লাসটি বেনিফিট @RunWith
করে MockitoJUnitRunner
যা এই কাজটি করে এবং অন্যান্য দরকারী জিনিসগুলি নির্দিষ্ট করে:
@RunWith(org.mockito.runners.MockitoJUnitRunner.class)
public MyClassTest{...}
মকিতো লাইব্রেরি মোড়ানো স্প্রিং বুট গ্রন্থাগার
এটি প্রকৃতপক্ষে একটি স্প্রিং বুট শ্রেণি :
import org.springframework.boot.test.mock.mockito.MockBean;
...
@MockBean
MyService myservice;
ক্লাসটি spring-boot-test
লাইব্রেরিতে অন্তর্ভুক্ত রয়েছে ।
এটি একটি বসন্তে মকিতো মোককে যোগ করতে দেয় ApplicationContext
।
যদি কোনও শিম, ঘোষিত শ্রেণীর সাথে সামঞ্জস্যপূর্ণ প্রসঙ্গে উপস্থিত থাকে, তবে এটি এটি মক দ্বারা প্রতিস্থাপন করে।
যদি তা হয় না, এটা যোগ করা একটি শিম যেমন প্রেক্ষাপটে উপহাস।
জাভাডোক রেফারেন্স:
একটি স্প্রিং অ্যাপ্লিকেশন কনটেক্সটে মক যোগ করতে ব্যবহৃত টীকা।
...
প্রসঙ্গে বর্ণিত একই ধরণের যে কোনও বিদ্যমান একক শিমটি মক দ্বারা প্রতিস্থাপন করা হবে, যদি কোনও বিদ্যমান শিমের সংজ্ঞা না দেওয়া হয় তবে একটি নতুন যুক্ত করা হবে।
ক্লাসিক / প্লেইন মকিতো কখন এবং @MockBean
স্প্রিং বুট থেকে ব্যবহার করবেন ?
ইউনিট পরীক্ষাগুলি অন্য উপাদানগুলি থেকে বিচ্ছিন্ন করার জন্য একটি উপাদান পরীক্ষা করার জন্য ডিজাইন করা হয়েছে এবং ইউনিট পরীক্ষাগুলিরও একটি প্রয়োজনীয়তা রয়েছে: এই পরীক্ষাগুলি বিকাশকারী মেশিনগুলিতে প্রতিদিন ডজনবার কার্যকর করা যেতে পারে কার্যকরকরণের সময় হিসাবে যত দ্রুত সম্ভব being
ফলস্বরূপ, এখানে একটি সহজ গাইডলাইন:
আপনি যেমন একটি পরীক্ষা লিখেন যার জন্য স্প্রিং বুট ধারকটির কোনও নির্ভরতার প্রয়োজন নেই, ক্লাসিক / প্লেইন মকিতো হ'ল অনুসরণ করার উপায়: এটি দ্রুত এবং পরীক্ষিত উপাদানটি বিচ্ছিন্ন করার পক্ষে।
যদি আপনার পরীক্ষার জন্য স্প্রিং বুট ধারকটির উপর নির্ভর করতে হয় এবং আপনি কোনও ধারক মটরশুটি যোগ করতে বা উপহাস করতে চান: @MockBean
স্প্রিং বুট থেকে উপায়।
স্প্রিং বুটের সাধারণ ব্যবহার @MockBean
আমরা যেমন @WebMvcTest
(ওয়েব পরীক্ষার স্লাইস) দিয়ে টীকায়িত একটি পরীক্ষার শ্রেণি লিখি ।
স্প্রিং বুট ডকুমেন্টেশনগুলি খুব ভালভাবে সংক্ষিপ্তসার করে:
প্রায়শই
@WebMvcTest
একক নিয়ামকের মধ্যে সীমাবদ্ধ থাকে এবং@MockBean
প্রয়োজনীয় সহযোগীদের জন্য মক বাস্তবায়ন সরবরাহের জন্য একত্রে ব্যবহৃত হয় ।
এখানে একটি উদাহরণ:
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
@RunWith(SpringRunner.class)
@WebMvcTest(FooController.class)
public class FooControllerTest {
@Autowired
private MockMvc mvc;
@MockBean
private FooService fooServiceMock;
@Test
public void testExample() throws Exception {
Foo mockedFoo = new Foo("one", "two");
Mockito.when(fooServiceMock.get(1))
.thenReturn(mockedFoo);
mvc.perform(get("foos/1")
.accept(MediaType.TEXT_PLAIN))
.andExpect(status().isOk())
.andExpect(content().string("one two"));
}
}
@MockBean
বর্ণিত হয়েছে, একই ধরণের ঘোষিত শিম আপনার স্প্রিং কনফিগারেশনে ইতিমধ্যে সংজ্ঞায়িত করা থাকলে অ্যাপ্লিকেশন প্রসঙ্গে শিমটি ব্যবহার করে প্রতিস্থাপন করা হবে। এবং ইঞ্জিনটি ক্লাসে সঞ্চালিত হয় যেখানে আপনি ঘোষণা করেন @MockBean.
যে ডিআই মেকানিজমগুলি এইভাবে কাজ করে: আপনি ডিআই প্রসঙ্গে একটি বিষয় নিবন্ধভুক্ত করেন এবং তারপরে আপনি কোনও নির্দিষ্ট শ্রেণিতে বসন্তের প্রসঙ্গে রেফারেন্স করা বস্তুকে ইনজেক্ট করতে পারেন। আপনি ডিআই প্রসঙ্গে কোনও বস্তু ইনজেক্ট করবেন না।
শেষে এটি ব্যাখ্যা করা সহজ। আপনি যদি টীকাগুলির জাভাদোকগুলি সন্ধান করেন তবে আপনি ভিন্নতা দেখতে পাবেন:
@ মোক: ( org.mockito.Mock
)
একটি ক্ষেতটিকে একটি উপহাস হিসাবে চিহ্নিত করুন।
- শর্টহ্যান্ড মক তৈরির অনুমতি দেয়।
- পুনরাবৃত্তিমূলক মেক তৈরির কোডটি ন্যূনতম করে।
- পরীক্ষার শ্রেণিকে আরও পাঠযোগ্য করে তোলে।
- পাঠটি যাচাইকরণ ত্রুটিটিকে আরও সহজ করে তোলে কারণ ক্ষেত্রের নামটি মক শনাক্ত করতে ব্যবহৃত হয়।
@ মকবিয়ান: ( org.springframework.boot.test.mock.mockito.MockBean
)
একটি স্প্রিং অ্যাপ্লিকেশন কনটেক্সটে মক যোগ করতে ব্যবহৃত টীকা। ক্লাস লেভেল টীকা হিসাবে ব্যবহার করা যেতে পারে বা উভয়
@Configuration
শ্রেণিতে ক্ষেত্রগুলিতে , বা@RunWith
স্প্রিংআরনার যা পরীক্ষা ক্লাস ।মকস টাইপ বা শিমের নাম দ্বারা নিবন্ধিত হতে পারে। প্রসঙ্গে নির্ধারিত একই ধরণের যে কোনও বিদ্যমান একক শিমটি মক দ্বারা প্রতিস্থাপন করা হবে, যদি কোনও বিদ্যমান শিমের সংজ্ঞা না দেওয়া হয় তবে একটি নতুন যুক্ত করা হবে।
@MockBean
ক্ষেত্রটিতে কখন ব্যবহৃত হয়, পাশাপাশি অ্যাপ্লিকেশন প্রসঙ্গে নিবন্ধভুক্ত হওয়ার পরে, মোকটি ক্ষেত্রের মধ্যেও ইনজেকশনের ব্যবস্থা করা হবে।
Mockito.mock ()
এটি কেবল একটি প্রতিনিধিত্ব
@Mock
।
@MockBean
এবং @Mock
এটি একটিতে মক ইনজেকশন দেবে Spring ApplicationContext
এবং অন্যটি করবে না?