পরীক্ষার জন্য স্কোয়ার retrofit সার্ভার মক


98

বর্গ retrofit ফ্রেমওয়ার্ক ব্যবহার করার সময় পরীক্ষার জন্য কোনও সার্ভারকে উপহাস করার সর্বোত্তম উপায় কী ।

সম্ভাব্য উপায়:

  1. একটি নতুন retrofit তৈরি করুন ক্লায়েন্ট এবং এটি RestAdapter.Builder ()। SetClient () এ সেট করুন। এর মধ্যে অনুরোধটি অবজেক্টটি পার্স করা এবং জেসনকে প্রতিক্রিয়া হিসাবে প্রত্যাবর্তন করা জড়িত।

  2. এই বর্ণিত ইন্টারফেসটিকে মক ক্লাস হিসাবে প্রয়োগ করুন এবং এটি রেস্টাএডাপ্টার.ক্রিয়েট () টেস্ট গসন সিরিয়ালাইজেশন দ্বারা সরবরাহিত সংস্করণের জায়গায় ব্যবহার করুন

  3. ?

আদর্শভাবে আমি উপহাস করা সার্ভারটি জসন প্রতিক্রিয়া সরবরাহ করতে চাই যাতে আমি একই সাথে জিএসএন সিরিয়ালাইজেশন পরীক্ষা করতে পারি।

যে কোনও উদাহরণ প্রশংসিত হবে।


@ জ্যাকওয়ার্টন, এর উদ্দেশ্য কী square-oss? এটি অপ্রয়োজনীয় মনে হচ্ছে retrofit
চার্লস

@ অ্যালেক হোমস: আপনি কি সমস্যার সমাধান করেছেন?
অ্যান্ডিজিকি

উত্তর:


107

মক retrofit 2.0 পরীক্ষার জন্য অনুরোধ

যেহেতু MockClientক্লাস তৈরি করা এবং এটি বাস্তবায়নের মতো পুরানো পদ্ধতিগুলি Clientরেট্রোফিট ২.০ নিয়ে আর কাজ করছে না, তাই আমি এখানে এটি করার একটি নতুন পদ্ধতি বর্ণনা করছি। আপনাকে এখন যা করতে হবে তা হ'ল নীচে দেখানো মত OkHttpClient এর জন্য আপনার কাস্টম ইন্টারসেপ্টর যুক্ত করাFakeInterceptorশ্রেণি কেবল interceptপদ্ধতিটিকে ওভাররাইড করে এবং ক্ষেত্রে যদি অ্যাপ্লিকেশনটি DEBUGমোড রিটার্নে দেওয়া হয় JSON দেওয়া হয়।

RestClient.java

public final class RestClient {

    private static IRestService mRestService = null;

    public static IRestService getClient() {
        if(mRestService == null) {
            final OkHttpClient client = new OkHttpClient();
            // ***YOUR CUSTOM INTERCEPTOR GOES HERE***
            client.interceptors().add(new FakeInterceptor());

            final Retrofit retrofit = new Retrofit.Builder()
                            // Using custom Jackson Converter to parse JSON
                            // Add dependencies:
                            // com.squareup.retrofit:converter-jackson:2.0.0-beta2
                    .addConverterFactory(JacksonConverterFactory.create())
                            // Endpoint
                    .baseUrl(IRestService.ENDPOINT)
                    .client(client)
                    .build();

            mRestService = retrofit.create(IRestService.class);
        }
        return mRestService;
    }
}

আইআরয়েস্ট সার্ভিস.জভা

public interface IRestService {

    String ENDPOINT = "http://www.vavian.com/";

    @GET("/")
    Call<Teacher> getTeacherById(@Query("id") final String id);
}

FakeIntercepor.java

public class FakeInterceptor implements Interceptor { 
    // FAKE RESPONSES.
    private final static String TEACHER_ID_1 = "{\"id\":1,\"age\":28,\"name\":\"Victor Apoyan\"}";
    private final static String TEACHER_ID_2 = "{\"id\":1,\"age\":16,\"name\":\"Tovmas Apoyan\"}";

    @Override
    public Response intercept(Chain chain) throws IOException {
        Response response = null;
        if(BuildConfig.DEBUG) {
            String responseString;
            // Get Request URI.
            final URI uri = chain.request().url().uri();
            // Get Query String.
            final String query = uri.getQuery();
            // Parse the Query String.
            final String[] parsedQuery = query.split("=");
            if(parsedQuery[0].equalsIgnoreCase("id") && parsedQuery[1].equalsIgnoreCase("1")) {
                responseString = TEACHER_ID_1;
            }
            else if(parsedQuery[0].equalsIgnoreCase("id") && parsedQuery[1].equalsIgnoreCase("2")){
                responseString = TEACHER_ID_2;
            }
            else {
                responseString = "";
            }

            response = new Response.Builder()
                    .code(200)
                    .message(responseString)
                    .request(chain.request())
                    .protocol(Protocol.HTTP_1_0)
                    .body(ResponseBody.create(MediaType.parse("application/json"), responseString.getBytes()))
                    .addHeader("content-type", "application/json")
                    .build();
        }
        else {
            response = chain.proceed(chain.request());
        }

        return response;
    }
}

গিটহাবে প্রকল্পের উত্স কোড


10
অসমর্থিত অপেশনের ধারণা এড়ানোর জন্য OkHttpClient.Builder ব্যবহার করুন। চূড়ান্ত OkHttpClient OkHttpClient = নতুন OkHttpClient.Builder () .addIntercepor (নতুন FakeIntercepor ())। বিল্ড ();
জন

4
আমার দুটি সমস্যা আছে: ১- এর uri()অধীন কোনও নেই chain.request().uri()(আমি String url = chain.request().url().toString();এটিকে আমার ক্ষেত্রে পৃথক হিসাবে ঠিক করেছি)। 2- আমি পেয়ে করছি java.lang.IllegalStateException: network interceptor my.package.name.FakeInterceptor must call proceed() exactly once। আমি addNetworkInterceptor()বরং এটি যোগ করেছেন addInterceptor()
হেসাম

4
চেইন.আরকোয়েস্ট ()। url ()। uri () ব্যবহার করুন;
অমল গুপ্তা

HttpClient.authenticator পদ্ধতি পরীক্ষা করতে আমি 401 ত্রুটিটিকে কীভাবে উপহাস করতে পারি? কেবল কোড "401" রেখে প্রমাণীকরণ পদ্ধতিতে কল হয় না। আমি কিভাবে এটি পরিচালনা করতে পারি?
মাহদি

আমি ওয়েব এপিএসকে পরবর্তী স্তরে ঠাট্টা করার জন্য ভুয়া ইন্টারসেপ্টর পদ্ধতির গ্রহণ করেছি এবং এটি আরও সহজ এবং আরও সুবিধাজনক করার জন্য এটির জন্য একটি ছোট্ট লাইব্রেরি প্রকাশ করেছি। দেখুন github.com/donfuxx/Mockinizer
donfuxx

85

আমি নীচে পদ্ধতি 1 চেষ্টা করার সিদ্ধান্ত নিয়েছে

public class MockClient implements Client {

    @Override
    public Response execute(Request request) throws IOException {
        Uri uri = Uri.parse(request.getUrl());

        Log.d("MOCK SERVER", "fetching uri: " + uri.toString());

        String responseString = "";

        if(uri.getPath().equals("/path/of/interest")) {
            responseString = "JSON STRING HERE";
        } else {
            responseString = "OTHER JSON RESPONSE STRING";
        }

        return new Response(request.getUrl(), 200, "nothing", Collections.EMPTY_LIST, new TypedByteArray("application/json", responseString.getBytes()));
    }
}

এবং এটি ব্যবহার করে:

RestAdapter.Builder builder = new RestAdapter.Builder();
builder.setClient(new MockClient());

এটি ভালভাবে কাজ করে এবং আপনাকে সত্যিকারের সার্ভারের সাথে যোগাযোগ না করেই আপনার জসন স্ট্রিংগুলি পরীক্ষা করতে দেয়!


IllegalArgumentException url == nullপুরানোটিকে অবনমিত হিসাবে ব্যবহার করা রেসপন্স কনস্ট্রাক্টরটি আমি আপডেট করেছি, যা রেট্রোফিট ১.৪.১ সহ একটি নিক্ষেপ করছে ।
ড্যান জে

4
এছাড়াও বিল্ডারে একটি শেষ পয়েন্ট যুক্ত করা দরকার:builder.setEndpoint("http://mockserver.com").setClient(new MockClient());
কোডপ্রেসন

আমি ইউআরএল অনুরোধের উপর নির্ভর করে সম্পদ ফোল্ডারে কোনও ফাইল থেকে প্রতিক্রিয়া আনতে উপরে মক ক্লায়েন্টকে প্রসারিত করেছি।
praveena_kd

21
রিট্রোফিট 2 এখন ক্লায়েন্ট স্তরের জন্য OkHttpClient ব্যবহার করে এবং এই কোডটি কাজ করে না। Ok কীভাবে কোনও OkHttpClient উপহাস করবেন? সম্ভবত এটি এটিকে প্রসারিত করা এবং ওভাররাইড করা সম্পর্কে সমস্ত কিছু, তবে কীভাবে তা আমি নিশ্চিত নই।
গিলারমো এমপি

4
আপনি কি রেট্রোফিট 2 এর উপর ভিত্তি করে আপনার উত্তর আপডেট করতে পারবেন? ধন্যবাদ
হেসাম

20

আপনার বস্তুগুলিতে জেএসওনকে ডিসেরায়ালাইজেশন পরীক্ষা করা হচ্ছে (সম্ভবতঃ এর সাথে TypeAdapters ?) একটি পৃথক সমস্যার মতো মনে হচ্ছে যার জন্য পৃথক ইউনিট পরীক্ষার প্রয়োজন।

আমি ব্যক্তিগতভাবে সংস্করণ 2 ব্যবহার করি। এটি টাইপ-নিরাপদ, রিফ্যাক্টর-বান্ধব কোড দেয় যা সহজেই ডিবাগ এবং পরিবর্তন করা যায়। সর্বোপরি, যদি আপনি পরীক্ষার জন্য তাদের বিকল্প সংস্করণ তৈরি না করে থাকেন তবে আপনার এপিআইটিকে ইন্টারফেস হিসাবে ঘোষণা করা ভাল কি! জয়ের জন্য পলিমারফিজম।

আর একটি বিকল্প জাভা ব্যবহার করে Proxy। এটি প্রকৃতপক্ষে কীভাবে রেট্রোফিট (বর্তমানে) এটির অন্তর্নিহিত HTTP মিথস্ক্রিয়াটি প্রয়োগ করে। স্বীকার করতে এটিকে আরও কাজের প্রয়োজন হবে, তবে আরও বেশি গতিশীল মক্কের অনুমতি দেওয়া হবে।


এটিও আমার পছন্দের উপায়। উপরে উল্লিখিত হিসাবে ডিবাগ করা অনেক সহজ, তারপরে প্রতিক্রিয়ার সংস্থার সাথে সরাসরি ডিল করা। টুইট মাথার নীচে আমি বিশ্বাস করি যে এটি যা-ই হোক না কেন retrofit does
loeschg

@ জ্যাকওয়ার্টন আপনি কি চান এটির একটি সংক্ষিপ্ত উদাহরণ প্রদান করতে পারেন? এটিকে দেখার জন্য আমার সমস্যা হচ্ছে ... ধন্যবাদ!
চাচা_টেক্স

4
@uncle_tex সম্মুখের একটি চেহারা আছে github.com/JakeWharton/u2020/blob/master/src/internalDebug/java/...
riwnodennyk


8

সত্যিকারের সার্ভারে যাওয়ার আগে আমি এপিআইকে বিদ্রূপ করার জন্য আমি এপিরিও.আইওর এক বড় ভক্ত ।

আপনি ফ্ল্যাট .json ফাইলগুলি ব্যবহার করতে এবং ফাইল সিস্টেম থেকে সেগুলি পড়তে পারেন।

আপনি সর্বজনীনভাবে অ্যাক্সেসযোগ্য এপিআই এর টুইটার, ফ্লিকার ইত্যাদি ব্যবহার করতে পারেন

এখানে রেট্রোফিট সম্পর্কে আরও কিছু দুর্দান্ত সংস্থান রয়েছে।

স্লাইডস: https://docs.google.com/presentation/d/12Eb8OPI0PDisCjWne9-0qlXvp_-R4HmqVCjigOIgwfY/edit#slide=id.p

ভিডিও: http://www.youtube.com/watch?v=UtM06W51pPw&feature=g-user-u

উদাহরণ প্রকল্প: https://github.com/dustin-graham/ucad_twitter_retrofit_sample


7

বিদ্রূপ (অস্বীকৃতি: আমি লেখক) ঠিক এই ঠিক কাজের জন্য তৈরি করা হয়েছিল।

মকারি হ'ল মকিং / টেস্টিং লাইব্রেরি যা রেট্রোফিটের জন্য অন্তর্নির্মিত সমর্থন সহ নেটওয়ার্কিং স্তরগুলি বৈধকরণের উপর দৃষ্টি নিবদ্ধ করে। এটি প্রদত্ত এপিআইয়ের চশমার ভিত্তিতে JUnit পরীক্ষা স্বয়ংক্রিয়ভাবে উত্পন্ন করে। ম্যানুয়ালি কোনও পরীক্ষা লিখতে হবে না এই ধারণাটি; সার্ভারের প্রতিক্রিয়াগুলিকে উপহাস করার জন্য ইন্টারফেস প্রয়োগ করছে না।


7
  1. প্রথমে আপনার retrofit ইন্টারফেস তৈরি করুন create

    public interface LifeKitServerService {
        /**
         * query event list from server,convert Retrofit's Call to RxJava's Observerable
         *
         * @return Observable<HttpResult<List<Event>>> event list from server,and it has been convert to Obseverable
         */
        @GET("api/event")
        Observable<HttpResult<List<Event>>> getEventList();
    }
    
  2. আপনার অনুরোধ অনুসারে:

    public final class HomeDataRequester {
        public static final String TAG = HomeDataRequester.class.getSimpleName();
        public static final String SERVER_ADDRESS = BuildConfig.DATA_SERVER_ADDR + "/";
        private LifeKitServerService mServerService;
    
        private HomeDataRequester() {
            OkHttpClient okHttpClient = new OkHttpClient.Builder()
                    //using okhttp3 interceptor fake response.
                    .addInterceptor(new MockHomeDataInterceptor())
                    .build();
    
            Retrofit retrofit = new Retrofit.Builder()
                    .client(okHttpClient)
                    .baseUrl(SERVER_ADDRESS)
                    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                    .addConverterFactory(GsonConverterFactory.create(new Gson()))
                    .build();
    
            //using okhttp3 inteception to fake response.
            mServerService = retrofit.create(LifeKitServerService.class);
    
            //Second choice,use MockRetrofit to fake data.
            //NetworkBehavior behavior = NetworkBehavior.create();
            //MockRetrofit mockRetrofit = new MockRetrofit.Builder(retrofit)
            //        .networkBehavior(behavior)
            //        .build();
            //mServerService = new MockLifeKitServerService(
            //                    mockRetrofit.create(LifeKitServerService.class));
        }
    
        public static HomeDataRequester getInstance() {
            return InstanceHolder.sInstance;
        }
    
        public void getEventList(Subscriber<HttpResult<List<Event>>> subscriber) {
            mServerService.getEventList()
                    .subscribeOn(Schedulers.io())
                    .unsubscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(subscriber);
        }
    }
    
  3. আপনি যদি দ্বিতীয় পছন্দটি ব্যবহার করেন (মক সার্ভার ডেটাতে রেট্রোফিট ইন্টারফেস ব্যবহার করুন), আপনাকে মকরেট্রোফিট করতে হবে, কোড অনুসরণ করুন:

    public final class MockLifeKitServerService implements LifeKitServerService {
    public static final String TAG = MockLifeKitServerService.class.getSimpleName();
    private BehaviorDelegate<LifeKitServerService> mDelegate;
    private Gson mGson = new Gson();
    
    public MockLifeKitServerService(BehaviorDelegate<LifeKitServerService> delegate) {
        mDelegate = delegate;
    }
    
    @Override
    public Observable<HttpResult<List<Event>>> getEventList() {
        List<Event> eventList = MockDataGenerator.generateEventList();
        HttpResult<List<Event>> httpResult = new HttpResult<>();
        httpResult.setCode(200);
        httpResult.setData(eventList);
    
        LogUtil.json(TAG, mGson.toJson(httpResult));
    
        String text = MockDataGenerator.getMockDataFromJsonFile("server/EventList.json");
        if (TextUtils.isEmpty(text)) {
            text = mGson.toJson(httpResult);
        }
        LogUtil.d(TAG, "Text:\n" + text);
    
        text = mGson.toJson(httpResult);
    
        return mDelegate.returningResponse(text).getEventList();
    }
    

৪. আমার ডেটা সম্পদ ফাইল (সম্পদ / সার্ভার / ইভেন্টলিস্ট.জসন) থেকে প্রাপ্ত, এই ফাইলের বিষয়বস্তু হ'ল:

    {
      "code": 200,
      "data": [
        {
          "uuid": "e4beb3c8-3468-11e6-a07d-005056a05722",
          "title": "title",
          "image": "http://image.jpg",
          "goal": 1500000,
          "current": 51233,
          "hot": true,
          "completed": false,
          "createdAt": "2016-06-15T04:00:00.000Z"
        }
      ]
    }

৫. আপনি যদি ওখটিপি ৩ ই ইন্টারসেপ্টর ব্যবহার করেন তবে আপনার স্ব-সংজ্ঞায়িত ইন্টারসেপ্টার দরকার, যেমন:

public final class MockHomeDataInterceptor implements Interceptor {
    public static final String TAG = MockHomeDataInterceptor.class.getSimpleName();

    @Override
    public Response intercept(Chain chain) throws IOException {
        Response response = null;

        String path = chain.request().url().uri().getPath();
        LogUtil.d(TAG, "intercept: path=" + path);

        response = interceptRequestWhenDebug(chain, path);
        if (null == response) {
            LogUtil.i(TAG, "intercept: null == response");
            response = chain.proceed(chain.request());
        }
        return response;
    }

    private Response interceptRequestWhenDebug(Chain chain, String path) {
        Response response = null;
        if (BuildConfig.DEBUG) {
            Request request = chain.request();
            if (path.equalsIgnoreCase("/api/event")) {
                //get event list
                response = getMockEventListResponse(request);
            }
    }

    private Response getMockEventListResponse(Request request) {
        Response response;

        String data = MockDataGenerator.getMockDataFromJsonFile("server/EventList.json");
        response = getHttpSuccessResponse(request, data);
        return response;
    }

    private Response getHttpSuccessResponse(Request request, String dataJson) {
        Response response;
        if (TextUtils.isEmpty(dataJson)) {
            LogUtil.w(TAG, "getHttpSuccessResponse: dataJson is empty!");
            response = new Response.Builder()
                    .code(500)
                    .protocol(Protocol.HTTP_1_0)
                    .request(request)
                    //protocol&request be set,otherwise will be exception.
                    .build();
        } else {
            response = new Response.Builder()
                    .code(200)
                    .message(dataJson)
                    .request(request)
                    .protocol(Protocol.HTTP_1_0)
                    .addHeader("Content-Type", "application/json")
                    .body(ResponseBody.create(MediaType.parse("application/json"), dataJson))
                    .build();
        }
        return response;
    }
}

In. শেষ পর্যন্ত আপনি কোড সহ আপনার সার্ভারটির জন্য অনুরোধ করতে পারেন:

mHomeDataRequester.getEventList(new Subscriber<HttpResult<List<Event>>>() {
    @Override
    public void onCompleted() {

    }

    @Override
    public void onError(Throwable e) {
        LogUtil.e(TAG, "onError: ", e);
        if (mView != null) {
            mView.onEventListLoadFailed();
        }
    }

    @Override
    public void onNext(HttpResult<List<Event>> httpResult) {
        //Your json result will be convert by Gson and return in here!!!
    });
}

পড়ার জন্য ধন্যবাদ.


5

@ অ্যালেকের উত্তরে যুক্ত করে, অনুরোধ URL এর উপর নির্ভর করে সম্পদ ফোল্ডারে কোনও পাঠ্য ফাইল থেকে সরাসরি প্রতিক্রিয়া পেতে আমি মক ক্লায়েন্টকে প্রসারিত করেছি।

প্রাক্তন

@POST("/activate")
public void activate(@Body Request reqdata, Callback callback);

এখানে মক ক্লায়েন্ট, বোঝে যে বহিস্কার করা URL টি সক্রিয় এবং সম্পদ ফোল্ডারে অ্যাক্টিভেট. টেক্সট নামের একটি ফাইল সন্ধান করে। এটি সম্পদ / অ্যাক্টিভেট.টেক্সট ফাইল থেকে সামগ্রীটি পড়ে এবং এপিআইয়ের প্রতিক্রিয়া হিসাবে প্রেরণ করে।

এখানে বর্ধিত MockClient

public class MockClient implements Client {
    Context context;

    MockClient(Context context) {
        this.context = context;
    }

    @Override
    public Response execute(Request request) throws IOException {
        Uri uri = Uri.parse(request.getUrl());

        Log.d("MOCK SERVER", "fetching uri: " + uri.toString());

        String filename = uri.getPath();
        filename = filename.substring(filename.lastIndexOf('/') + 1).split("?")[0];

        try {
            Thread.sleep(2500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        InputStream is = context.getAssets().open(filename.toLowerCase() + ".txt");
        int size = is.available();
        byte[] buffer = new byte[size];
        is.read(buffer);
        is.close();
        String responseString = new String(buffer);

        return new Response(request.getUrl(), 200, "nothing", Collections.EMPTY_LIST, new TypedByteArray("application/json", responseString.getBytes()));
    }
}

বিস্তারিত ব্যাখ্যার জন্য আপনি আমার ব্লগটি http://www.cumulations.com/blogs/13/Mock-API-response-in-Retrofit- using-custom-clients চেকআউট করতে পারেন


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

হাই @ ডরি নিশ্চিত করুন যে সম্পদ ফোল্ডারের ভিতরে আপনার URL টি শেষ অংশ এবং ফাইল নাম রয়েছে। উদাহরণস্বরূপ, যাক আপনার ইউআরএলটি নীচে হিসাবে রয়েছে (এখানে রিফ্রোফিট ব্যবহার করে) @ পোষ্ট ("/ রিডেমজিফট") সার্বজনীন শূন্য রাইডিম গাইফ্ট (@ বডি এমপোসরেইকস্ট রেকডাটা, কলব্যাক <রিডেমগাইফট রেসপোনস> কলব্যাক); তারপর সম্পদ ফোল্ডারে correspodning ফাইলের নাম redeemgyft.txt হয়
praveena_kd

আমি স্ট্যাটিক ফাইলের নাম দিয়েছি MockClient, আমার ফাইলে, রোবलेक्ट্রিক ব্যবহার করে একটি পরীক্ষার ক্লাস লিখেছি। তবে আমি জসন ফাইল থেকে কোনও প্রতিক্রিয়া পেতে সক্ষম নই।
ডোরি

আপনি যদি ফাইলটি সম্পদ ফোল্ডারের ভিতরে রেখে থাকেন তবে তা এটি তুলে নেওয়া উচিত।
praveena_kd

1

জেএসএনপ্লেসোল্ডার: টেস্টিং এবং প্রোটোটাইপিংয়ের জন্য জাল অনলাইন REST এপিআই

https://jsonplaceholder.typicode.com/

ReqresIn: আর একটি অনলাইন REST এপিআই

https://reqres.in/

পোস্টম্যান মক সার্ভার

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

এখানে চিত্র বর্ণনা লিখুন https://learning.getpostman.com/docs/postman/mock_servers/intro_to_mock_servers/ https://youtu.be/shYn3Ys3ygE


1

রেট্রোফিটের সাথে এপিআই কলগুলি উপহাস করা এখন মকইনাইজারের সাথে আরও সহজতর যা মক ওয়েবসার্ভারের সাথে কাজ করে সত্যিকারের সামনে সরাসরি:

import com.appham.mockinizer.RequestFilter
import okhttp3.mockwebserver.MockResponse

val mocks: Map<RequestFilter, MockResponse> = mapOf(

    RequestFilter("/mocked") to MockResponse().apply {
        setResponseCode(200)
        setBody("""{"title": "Banana Mock"}""")
    },

    RequestFilter("/mockedError") to MockResponse().apply {
        setResponseCode(400)
    }

)

কেবলমাত্র অনুরোধ ফিল্টার এবং মকরেসপনসেসের একটি মানচিত্র তৈরি করুন এবং তারপরে এটি আপনার OkHttpClient বিল্ডার চেইনে প্লাগ করুন:

OkHttpClient.Builder()
            .addInterceptor(loggingInterceptor)
            .mockinize(mocks) // <-- just plug in your custom mocks here
            .build()

মকওয়েব সার্ভার ইত্যাদি কনফিগার করার বিষয়ে আপনাকে উদ্বিগ্ন হওয়ার দরকার নেই আপনার মকগুলি যোগ করুন বাকী সমস্ত আপনার জন্য মকিনাইজার দ্বারা সম্পন্ন হয়েছে।

(অস্বীকৃতি: আমি মকিনাইজারের লেখক)


0

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

সম্পাদনা করুন: এখানে আপনি retrofit উপহাস করার উদাহরণ খুঁজে পান https://github.com/pawelByszewski/retrofitmock

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