Writing tests is not the most glamorous part of developing an Android application but it is an invaluable one. Using libraries like JUnit and FEST provide a great starting point for writing tests.
This library is an extension of FEST which aims to make it even easier to test Android.
assertThat(view).isGone();
assertEquals(View.GONE, view.getVisibility());
assertThat(view.getVisibility()).isEqualTo(View.GONE);
When failing, the FEST Android assertion produces an output which allows you to immediately recognize the problem: Expected visibility <gone> but was <invisible>.
Compare that to the output of regular FEST expected:<[8]> but was:<[4]>
and regular JUnit expected: <8> but was: <4>
and you should immediately see the advantage.
Because FEST Android offers assertions directly on objects rather than properties they can be chained together.
assertThat(layout).isVisible() .isVertical() .hasChildCount(4) .hasShowDividers(SHOW_DIVIDERS_MIDDLE);
assertEquals(View.VISIBLE, layout.getVisibility()); assertEquals(VERTICAL, layout.getOrientation()); assertEquals(4, layout.getChildCount()); assertEquals(SHOW_DIVIDERS_MIDDLE, layout.getShowDividers());
assertThat(layout.getVisibility()).isEqualTo(View.VISIBLE); assertThat(layout.getOrientation()).isEqualTo(VERTICAL); assertThat(layout.getChildCount()).isEqualTo(4); assertThat(layout.getShowDividers()).isEqualTo(SHOW_DIVIDERS_MIDDLE);
Assertions exist for nearly every object that you would ever want to test, from LinearLayout
to ActionBar
to Fragment
to MenuItem
. Everything in the support library is included too.
To get started writing tests add the following import:
import static org.fest.assertions.api.ANDROID.assertThat;
The provided assertions have also been designed to be extended for any custom controls you have developed.
public class CustomLayout extends LinearLayout { public int getBehavior() { /* ... */ } }
Use the following pattern to set up your assertions.
public class CustomLayoutAssert extends AbstractLinearLayoutAssert<CustomLayoutAssert, CustomLayout> { public CustomLayoutAssert(CustomLayout actual) { super(actual, CustomLayoutAssert.class); } public CustomLayoutAssert hasSomeBehavior() { isNotNull(); assertThat(actual.getBehavior()) .overridingErrorMessage("Expected some behavior but was doing other behavior.") .isEqualTo(42) return this; } }
To include this new assertion, create your own class which extends from ANDROID
.
public class MyAssertions extends ANDROID { public static CustomLayoutAssert assertThat(CustomLayout actual) { return new CustomLayoutAssert(actual); } }
For more information about writing custom assertions see the official documentation.
Download the latest jar or grab via Maven:
<dependency>
<groupId>com.squareup</groupId>
<artifactId>fest-android</artifactId>
<version>(insert latest version)</version>
</dependency>
If you are not using Maven or Gradle you will also need to include the latest FEST jar in your build.
Compilation requires Android 4.1 or newer.