Android – Difference between Android Instrumentation test and Unit test in Android Studio


As of Android Studio 1.1rc there's Unit testing support and
I'm wondering what's the difference between Android Instrumentation Tests and Unit tests.

As I understand it:
Unit tests are useful for testing code which doesn't call the Android
API, and the Android instrumentation tests are rather integration
tests to test Android API specific elements or GUI components.

However if you use a framework like Robolectric or Mockito in your
unit tests, you can test Android code (without the need of a device) if I'm not mistaken.

Is this correct, or is there a bigger difference? If so, what's the use of each?

Best Solution

It seems to me that instrumentation testing is integration testing with the ability to control the life cycle and the events (onStart, onCreate etc) of the app.

Unit testing, as i understand it, is testing a Unit (eg Class) for its data and behavior.

For example, say you have a game: this game runs on an activity (main activity) and you have a character based on a Robot class, that has 2 methods (fire and move). You would test the main activity with an instrumentation test to see if it saves correctly when you leave the app, if it restores correctly when you restore it etc. and you would test Robot with a Unit test, to test its attributes and behavior.

Disclaimer: I'm not a java person, but i took interest in your question and i answered it based on a minor search online. You probably have to dig deeper into this to find a more detailed answer.