Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

A set of FEST assertion helpers geared toward testing Android.

README.md

Android FEST

A set of FEST assertions geared toward testing Android.

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.

Examples

  • FEST Android:

    assertThat(view).isGone();
    
  • Regular JUnit:

    assertEquals(View.GONE, view.getVisibility());
    
  • Regular FEST:

    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.

  • FEST Android:

    assertThat(layout).isVisible()
        .isVertical()
        .hasChildCount(4)
        .hasShowDividers(SHOW_DIVIDERS_MIDDLE);
    
  • Regular JUnit:

    assertEquals(View.VISIBLE, layout.getVisibility());
    assertEquals(VERTICAL, layout.getOrientation());
    assertEquals(4, layout.getChildCount());
    assertEquals(SHOW_DIVIDERS_MIDDLE, layout.getShowDividers());
    
  • Regular FEST:

    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;

Extending

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

Download the latest JAR or grab via Maven:

<dependency>
  <groupId>com.squareup</groupId>
  <artifactId>fest-android</artifactId>
  <version>1.0.1</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.

License

Copyright 2013 Square, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Something went wrong with that request. Please try again.