Added in API level 1
Deprecated in API level 24

ApplicationTestCase


abstract class ApplicationTestCase<T : Application!> : AndroidTestCase

This test case provides a framework in which you can test Application classes in a controlled environment. It provides basic support for the lifecycle of a Application, and hooks by which you can inject various dependencies and control the environment in which your Application is tested.

Lifecycle Support. Every Application is designed to be accessed within a specific sequence of method calls (see android.app.Application for more details). In order to support the lifecycle of a Application, this test case will make the following calls at the following times.

  • The test case will not call onCreate() until your test calls createApplication(). This gives you a chance to set up or adjust any additional framework or test logic before onCreate().
  • After your test completes, the test case tearDown method is automatically called, and it will stop & destroy your application by calling its onDestroy() method.

Dependency Injection. Every Application has one inherent dependency, the Context in which it runs. This framework allows you to inject a modified, mock, or isolated replacement for this dependencies, and thus perform a true unit test.

If simply run your tests as-is, your Application will be injected with a fully-functional Context. You can create and inject alternative types of Contexts by calling setContext(). You must do this before calling createApplication(). The test framework provides a number of alternatives for Context, including MockContext, RenamingDelegatingContext, and ContextWrapper.

Summary

Public constructors
ApplicationTestCase(applicationClass: Class<T>!)

Public methods
open T

open Context!

Return a real (not mocked or instrumented) system Context that can be used when generating Mock or other Context objects for your Application under test.

Unit

This test simply confirms that the Application class can be instantiated properly.

Protected methods
Unit

Start the Application under test, in the same way as if it was started by the system.

open Unit

This will do the work to instantiate the Application under test.

open Unit

Shuts down the Application under test.

Unit

This will make the necessary calls to terminate the Application under test (it will call onTerminate().

Inherited functions
Unit assertActivityRequiresPermission(packageName: String!, className: String!, permission: String!)

Asserts that launching a given activity is protected by a particular permission by attempting to start the activity and validating that a SecurityException is thrown that mentions the permission in its error message. Note that an instrumentation isn't needed because all we are looking for is a security error and we don't need to wait for the activity to launch and get a handle to the activity.

Unit assertReadingContentUriRequiresPermission(uri: Uri!, permission: String!)

Asserts that reading from the content uri requires a particular permission by querying the uri and ensuring a SecurityException is thrown mentioning the particular permission.

Unit assertWritingContentUriRequiresPermission(uri: Uri!, permission: String!)

Asserts that writing to the content uri requires a particular permission by inserting into the uri and ensuring a SecurityException is thrown mentioning the particular permission.

Context! getContext()

Context! getTestContext()

Returns the test context that was set via setTestContext(android.content.Context).

Unit scrubClass(testCaseClass: Class<*>!)

This function is called by various TestCase implementations, at tearDown() time, in order to scrub out any class variables. This protects against memory leaks in the case where a test case creates a non-static inner class (thus referencing the test case) and gives it to someone else to hold onto.

Unit setContext(context: Context!)

Unit setTestContext(context: Context!)

Test context can be used to access resources from the test's own package as opposed to the resources from the test target package. Access to the latter is provided by the context set with the setContext method.

Unit testAndroidTestCaseSetupProperly()

Inherited properties

Public constructors

ApplicationTestCase

Added in API level 1
ApplicationTestCase(applicationClass: Class<T>!)

Public methods

getApplication

Added in API level 1
open fun getApplication(): T

Deprecated: Deprecated in Java.

Return
T Returns the actual Application under test.

getSystemContext

Added in API level 1
open fun getSystemContext(): Context!

Deprecated: Deprecated in Java.

Return a real (not mocked or instrumented) system Context that can be used when generating Mock or other Context objects for your Application under test.

Return
Context! Returns a reference to a normal Context.

testApplicationTestCaseSetUpProperly

Added in API level 1
fun testApplicationTestCaseSetUpProperly(): Unit

Deprecated: Deprecated in Java.

This test simply confirms that the Application class can be instantiated properly.

Exceptions
java.lang.Exception

Protected methods

createApplication

Added in API level 1
protected fun createApplication(): Unit

Deprecated: Deprecated in Java.

Start the Application under test, in the same way as if it was started by the system. If you use this method to start the Application, it will automatically be stopped by tearDown. If you wish to inject a specialized Context for your test, by calling setContext(), you must do so before calling this method.

setUp

Added in API level 1
protected open fun setUp(): Unit

Deprecated: Deprecated in Java.

This will do the work to instantiate the Application under test. After this, your test code must also start and stop the Application.

tearDown

Added in API level 1
protected open fun tearDown(): Unit

Deprecated: Deprecated in Java.

Shuts down the Application under test. Also makes sure all resources are cleaned up and garbage collected before moving on to the next test. Subclasses that override this method should make sure they call super.tearDown() at the end of the overriding method.

Exceptions
java.lang.Exception

terminateApplication

Added in API level 1
protected fun terminateApplication(): Unit

Deprecated: Deprecated in Java.

This will make the necessary calls to terminate the Application under test (it will call onTerminate(). Ordinarily this will be called automatically (by tearDown, but you can call it directly from your test in order to check for proper shutdown behaviors.