I have to build an app with sqlite usage. Now I want to write my unit tests. These unit tests should test my class SQLiteBridge
. SQLiteBridge
provides DAOs for every child class of Model.
Now I got the problem that I need a context to create my SQLiteBridge
. SQLiteBridge
creates and handles a SQLite database on the system..
Where to get the Context-Object from?
My setup is like here (so I'm using Junit4 [thanks god]): http://tools.android.com/tech-docs/unit-testing-support
EDIT: I hope there is a way like the old AndroidTestCase
to extend without losing Junit4. :)
When you use AndroidJUnitRunner to run your tests, you can access the context for the app under test by calling the static ApplicationProvider. getApplicationContext() method. If you've created a custom subclass of Application in your app, this method returns your custom subclass's context.
JUnit is a “Unit Testing” framework for Java Applications which is already included by default in android studio. It is an automation framework for Unit as well as UI Testing. It contains annotations such as @Test, @Before, @After, etc.
As described here: https://code.google.com/p/android-test-kit/wiki/AndroidJUnitRunnerUserGuide Use the InstrumentationRegistry to obtain the context.
However if you call InstrumentationRegistry.getContext()
directly you may get an exception opening your database. I believe this is because the context returned by getContext() points to the instrumentation's context rather than that of your application / unit test. Instead use InstrumentationRegistry.getInstrumentation().getTargetContext()
For example:
@RunWith(AndroidJUnit4.class) public class SqliteTest { Context mMockContext; @Before public void setUp() { mMockContext = new RenamingDelegatingContext(InstrumentationRegistry.getTargetContext(), "test_"); } }
The RenamingDelegatingContext simply prefixes the file/database names with test_ to prevent you from overwriting data that you may have in the same simulator.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With