অ্যান্ড্রয়েড জুনিট পরীক্ষা ক্ষেত্রে পরীক্ষার প্রকল্পের প্রসঙ্গ পান


107

কেউ কি জানেন যে কীভাবে আপনি অ্যান্ড্রয়েড জুনিট টেস্ট কেসে অ্যান্ড্রয়েড টেস্টকেসে প্রসারিত টেস্ট প্রকল্পের প্রসঙ্গটি পেতে পারেন ।

দ্রষ্টব্য: পরীক্ষাটি যন্ত্রের পরীক্ষা নয়।

দ্রষ্টব্য 2: আমার পরীক্ষার প্রকল্পের প্রসঙ্গটি দরকার, পরীক্ষিত প্রকৃত প্রয়োগের প্রসঙ্গটি নয়।

পরীক্ষা প্রকল্পের সম্পদ থেকে কিছু ফাইল লোড করার জন্য আমার এটি দরকার।


আপনি কেন কেবল ইনস্ট্রুমেন্টেশনটেষ্টকেস ব্যবহার করতে পারবেন না?

1
কারণ আমি পরিষেবাগুলি পরীক্ষা করছি, ইউআই নয়।
পিসেপেস করুন

1
: [1] [1] [পরিবর্তে একটি JUnit পরীক্ষার AndroidTestCase ব্যবহার]: একটা ভাল উত্তর এখানে পাওয়া গেছে stackoverflow.com/questions/3170706/...
জেইমি Botero

উত্তর:


135

অ্যান্ড্রয়েড টেস্টিং সমর্থন লাইব্রেরি (বর্তমানে androidx.test:runner:1.1.1) এর সাথে নতুন পদ্ধতি রয়েছে । কোটলিন আপডেট হওয়া উদাহরণ:

class ExampleInstrumentedTest {

    lateinit var instrumentationContext: Context

    @Before
    fun setup() {
        instrumentationContext = InstrumentationRegistry.getInstrumentation().context
    }

    @Test
    fun someTest() {
        TODO()
    }
}

আপনি যদি চান তবে অ্যাপ্লিকেশন প্রসঙ্গটি চালান:

InstrumentationRegistry.getInstrumentation().targetContext

পূর্ণ চলমান উদাহরণ: https://github.com/fada21/AndroidTestContextExample

এখানে দেখুন: getTargetContext () এবং getContext (ইনস্ট্রুমেন্টেশনরেজিস্ট্রি) এর মধ্যে পার্থক্য কী?


ইনস্ট্রুমেন্টেশন টেস্টের সাথে কীভাবে JUnit4 ব্যবহার করবেন সে সম্পর্কে একটি উত্তর। কয়েক ঘন্টা অনুসন্ধানের পরে। অ্যান্ড্রয়েড বিকাশ ভালবাসেন।
ফ্যাবিয়ান জিন্ডল

1
নিস! tx (নোট করুন আপনার শ্রেণীর সদস্যের একটি টাইপো আছে)
গ্রেগ

1
এই কাজ করার জন্য গ্রেড ফাইলটিতে কোন নির্ভরতা যুক্ত করা দরকার তা সম্পর্কে কেউ সহায়তা করতে পারেন?
গ্রেগ

1
compile "com.android.support.test:runner:1.0.1"আপনার গ্রেডে যুক্ত করতে ভুলবেন না
উদাহরণস্বরূপ

2
এটি অবচয় করা হয়েছে, InstrumentationRegistry.getInstrumentation().contextপরিবর্তে ব্যবহার করুন।
অ্যালান ভেলোসো

37

কিছু গবেষণার পরে একমাত্র কার্যনির্বাহী সমাধানটি ইয়োকডাব্লু ইতিমধ্যে দেখানো হয়েছে বলে মনে হয়। আপনাকে InstrumentationTestCase প্রসারিত করতে হবে এবং তারপরে আপনি getInstrumentation ()। GetContext () ব্যবহার করে আপনার পরীক্ষার আবেদনের প্রসঙ্গটি অ্যাক্সেস করতে পারবেন - উপরের পরামর্শগুলি ব্যবহার করে এখানে একটি সংক্ষিপ্ত কোড স্নিপেট দেওয়া হয়েছে:

public class PrintoutPullParserTest extends InstrumentationTestCase {

    public void testParsing() throws Exception {
        PrintoutPullParser parser = new PrintoutPullParser();
        parser.parse(getInstrumentation().getContext().getResources().getXml(R.xml.printer_configuration));
    }
}

7
হ্যাঁ তবে এটি নির্বোধ বলে মনে হয় যে অ্যান্ড্রয়েড সাধারণ JUnit পরীক্ষায় পরীক্ষার প্রকল্পের প্রসঙ্গে অ্যাক্সেস সরবরাহ করে না। প্রসঙ্গটি অ্যান্ড্রয়েডটেষ্টক্যাস.এমটেষ্টকন্টেক্সটে রয়েছে তবে এটি ব্যক্তিগত। কেন দেখছি না।
দেখি

@ পুরো আকস্মিক ঘটনা - তবে এটি ঠিক কেমন তা আমি জানি না এবং এটি আমার
পছন্দও

25

আপনি যেমন AndroidTestCase উত্স কোডে পড়তে পারেন , getTestContext()পদ্ধতিটি গোপন।

/**
 * @hide
 */
public Context getTestContext() {
    return mTestContext;
}

আপনি @hideপ্রতিবিম্ব ব্যবহার করে টিকাটি বাইপাস করতে পারেন ।

আপনার মধ্যে নিম্নলিখিত পদ্ধতিটি যুক্ত করুন AndroidTestCase:

/**
 * @return The {@link Context} of the test project.
 */
private Context getTestContext()
{
    try
    {
        Method getTestContext = ServiceTestCase.class.getMethod("getTestContext");
        return (Context) getTestContext.invoke(this);
    }
    catch (final Exception exception)
    {
        exception.printStackTrace();
        return null;
    }
}

তারপরে যে getTestContext()কোনও সময় কল করুন । :)


2
আমার জন্য পুরোপুরি পরিশ্রম করেছি এবং আমি এই পদ্ধতির মাধ্যমে
অ্যান্ড্রয়েড

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

1
আমি পেয়েছিjava.lang.NoSuchMethodException: android.test.ServiceTestCase.getTestContext()

4

আপডেট: AndroidTestCase এই শ্রেণিটি এপিআই স্তরের 24 এ অবমুক্ত করা হয়েছিল InstrumentationRegistryinstead পরিবর্তে ব্যবহার করুন। অ্যান্ড্রয়েড টেস্টিং সহায়তা লাইব্রেরি ব্যবহার করে নতুন পরীক্ষাগুলি লিখতে হবে। ঘোষণার লিঙ্ক

আপনার টেস্টকেসের পরিবর্তে অ্যান্ড্রয়েড টেস্টকেস থেকে প্রসারিত করা উচিত।

অ্যান্ড্রয়েড টেস্টকেস ক্লাস ওভারভিউ
আপনার যদি ক্রিয়াকলাপ প্রসঙ্গে নির্ভরশীল সংস্থানসমূহ বা অন্যান্য জিনিস অ্যাক্সেস করতে হয় তবে এটি প্রসারিত করুন।

AndroidTestCase - অ্যান্ড্রয়েড বিকাশকারী Develop


4

আপনি যদি কোটলিন এবং মকিতোর সাথে প্রসঙ্গটি পেতে চান তবে আপনি এটি নিম্নলিখিত উপায়ে করতে পারেন:

val context = mock(Context::class.java)

আমি আশা করি এটি আপনাকে সাহায্য করবে


প্রসঙ্গে নাল হচ্ছে?
দেভেন

এবং আপনি @ রুনউইথ (মকিতোজেউনিতরুনার :: ক্লাস) সহ পরীক্ষার ক্লাসটি বর্ননা করতে ভুলবেন না
ইউএসম্যান ওসমান

2

প্রসঙ্গটি পাওয়ার জন্য এটি সঠিক উপায়। অন্যান্য পদ্ধতি ইতিমধ্যে অবচয় করা হয়েছে

import androidx.test.platform.app.InstrumentationRegistry

InstrumentationRegistry.getInstrumentation().context

2
import androidx.test.core.app.ApplicationProvider;

    private Context context = ApplicationProvider.getApplicationContext();

1

স্বয়ংক্রিয় পরীক্ষাগুলি তৈরি করার সময় যারা এই সমস্যার মুখোমুখি হন, তাদের এটি করা উচিত:

    Context instrumentationContext;

    @Before
    public void method() {

        instrumentationContext = InstrumentationRegistry.getInstrumentation().getContext();

        MultiDex.install(instrumentationContext);
    }

0

অন্যান্য উত্তরগুলি পুরানো। এই মুহূর্তে প্রতিবার আপনি AndroidTestCase প্রসারিত করার সময়, mContext Context অবজেক্ট রয়েছে যা আপনি ব্যবহার করতে পারেন।

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