Pertanyaan Dapatkan konteks proyek uji dalam kasus uji Junit Android


Apakah ada yang tahu bagaimana Anda bisa mendapatkan konteks Uji proyek dalam kasus uji Junit Android (memperluas AndroidTestCase).

Catatan: Tesnya bukan tes instrumentasi.

Catatan 2: Saya memerlukan konteks proyek uji, bukan konteks aplikasi sebenarnya yang diuji.

Saya perlu ini untuk memuat beberapa file dari aset dari proyek uji.


75
2017-12-22 14:55


asal


Jawaban:


Ada pendekatan baru dengan Android Testing Support Library (saat ini com.android.support.test: runner: 0.3) dirilis.

@RunWith(AndroidJUnit4.class)
@MediumTest
public class SomeClassTest {

    private Context instrumentationCtx;

    @Before
    public void setup() {
        instrumentationCtx = InstrumentationRegistry.getContext();
    }

    @Test
    public void someTest() {
        ...

Jika Anda ingin juga konteks konteks aplikasi:

InstrumentationRegistry.getTargetContext();

Lihat di sini: Apa perbedaan antara getTargetContext () dan getContext (pada InstrumentationRegistry)?


91
2018-06-17 11:52



Setelah beberapa penelitian, satu-satunya solusi yang berfungsi adalah yang sudah ditunjukkan oleh yorkw. Anda harus memperpanjang InstrumentationTestCase dan kemudian Anda dapat mengakses konteks aplikasi pengujian Anda menggunakan getInstrumentation (). GetContext () - di sini adalah cuplikan kode singkat menggunakan saran di atas:

public class PrintoutPullParserTest extends InstrumentationTestCase {

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

37
2018-01-15 14:17



Seperti yang bisa Anda baca di Kode sumber AndroidTestCase, yang getTestContext() metode tersembunyi.

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

Anda dapat memotong @hide anotasi menggunakan refleksi.

Cukup tambahkan metode berikut di Anda 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;
    }
}

Lalu telepon getTestContext() kapanpun kamu mau. :)


25
2018-01-09 10:16



Anda harus memperpanjang dari AndroidTestCase bukan TestCase.

Ikhtisar AndroidTestCase Kelas
Perluas ini jika Anda perlu mengakses Sumber Daya atau hal-hal lain yang bergantung pada Activity Context.

AndroidTestCase - Pengembang Android


3
2018-03-06 15:56



Jika Anda hanya perlu mengakses sumber daya proyek Anda, Anda dapat menggunakan getActivity () metode dari Kelas ActivityInstrumentationTestCase2:

 //...
 private YourActivityClass mActivity;
 @Override
 protected void setUp() throws Exception {
 //...
     mActivity = getActivity();

 }
 //...
 public void testAccessToResources() {
     String[] valueList;
     valueList = 
         mActivity.getResources().getStringArray(
                 com.yourporject.R.array.test_choices);
 }

0
2017-08-21 01:47



Jawaban lainnya sudah ketinggalan jaman. Saat ini setiap kali Anda memperpanjang AndroidTestCase, ada objek Konteks mContext yang dapat Anda gunakan.


0
2018-06-12 21:03