Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
166 views
in Technique[技术] by (71.8m points)

java - Assets folder in Android Studio Unit Test

I have a Gradle project with the following structure:

project/
    src/
        androidTest/
            java/
        main/
            java/
            res/
            AndroidManifest.xml
    build.gradle

Now I want to add a unit test which uses a resource (either "raw" or "asset").

I put my resource into project/androidTest/assets/test_file and access it with getContext().getResources().getAssets().open("test_file"); (in an AndroidTestCase).

However, this gives me a FileNotFoundException. How can I fix this?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

It looks like you're trying to create an instrumented unit test, since you want to create it in the androidTest folder.

You can use one of these two lines in your test to get the context:

  • Context ctx = InstrumentationRegistry.getTargetContext(); this one will give you your app's context. You can use it to grab assets that are in src/main/assets for example.

  • Context ctx = InstrumentationRegistry.getContext(); this one will give you the test app's context. You can use it to grab assets that are in src/androidTest/assets

If you want to know more about assets in unit testing you can read this post. In this github file you have an example.

Deprecation Note: As pointed out in the comments, these methods are now deprecated. This is the new recommended way:

  • First, instead of importing the old InstrumentationRegistry class, use the new one.
  • Instead of InstrumentationRegistry.getTargetContext(); use ApplicationProvider.getApplicationContext(). Source
  • For InstrumentationRegistry.getTargetContext();: In most scenarios, ApplicationProvider.getApplicationContext() should be used instead of the instrumentation test context. If you do need access to the test context for to access its resources, it is recommended to use PackageManager.getResourcesForApplication(String) instead. Source

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...