A set of AssertJ helpers geared toward testing Android.
Java Other
Latest commit 85a0acf Apr 4, 2016 @JakeWharton JakeWharton Merge pull request #212 from MariusVolkhart/MediaRouteDiscoveryReques…
…tAssert

Implement MediaRouteDiscoveryRequestAssert
Permalink
Failed to load latest commit information.
.buildscript Auto-deploy snapshots from Travis CI to Sonatype. Dec 20, 2014
assertj-android-appcompat-v7 Centralize dependency versions. Jul 23, 2015
assertj-android-cardview-v7 Update minSdkVersion in v7 libs to rootProject.ext.minSdkVersion Aug 10, 2015
assertj-android-design Assertions for TextInputLayout Jan 28, 2016
assertj-android-gridlayout-v7 Add Design Support library Jul 24, 2015
assertj-android-mediarouter-v7 Merge pull request #212 from MariusVolkhart/MediaRouteDiscoveryReques… Apr 4, 2016
assertj-android-palette-v7 Update minSdkVersion in v7 libs to rootProject.ext.minSdkVersion Aug 10, 2015
assertj-android-play-services calls super with assert class rather than actual Oct 22, 2015
assertj-android-recyclerview-v7 Compare against expected value in RecyclerViewLayoutManagerAssert Apr 4, 2016
assertj-android-support-v4 Add Design Support library Jul 24, 2015
assertj-android Merge pull request #209 from MariusVolkhart/TimePickerAssert Apr 4, 2016
gradle Update to Gradle 2.9. Dec 7, 2015
website Fixed recyclerview-v7 import statement info Dec 18, 2015
.gitignore Ignore reports directory. Jul 11, 2014
.travis.yml Latest libs. Jan 28, 2016
CHANGELOG.md Prepare version 1.1.1. Oct 17, 2015
CONTRIBUTING.md Update checkstyle instructions Sep 26, 2014
LICENSE.txt Initial commit. Jan 9, 2013
README.md Fix code sample for assertion extension Nov 3, 2015
RELEASING.md spelling: version Mar 13, 2016
build.gradle Latest libs. Jan 28, 2016
check-missing-assertions.sh Fix check script for new directory names. Jul 11, 2014
checkstyle.xml Switch to Gradle as the main build system. Oct 21, 2013
deploy_website.sh Remove javadoc from website for now. Aug 28, 2014
generate-assertions-java.py Account for additional generic parameters to superclass. Aug 16, 2014
gradle.properties Prepare next development version. Oct 17, 2015
gradlew Update to Gradle 2.9. Dec 7, 2015
gradlew.bat Add Gradle wrapper. Sep 16, 2013
settings.gradle Add Design Support library Jul 24, 2015

README.md

AssertJ Android

A set of AssertJ 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 AssertJ provide a great starting point for writing tests.

This library is an extension of AssertJ which aims to make it even easier to test Android.

Examples

  • AssertJ Android:

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

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

    assertThat(view.getVisibility()).isEqualTo(View.GONE);

When failing, the AssertJ 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 AssertJ Expected:<[8]> but was:<[4]> and regular JUnit Expected: <8> but was: <4> and you should immediately see the advantage.

Because AssertJ Android offers assertions directly on objects rather than properties they can be chained together.

  • AssertJ 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 AssertJ:

    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.assertj.android.api.Assertions.assertThat;

Add-On Modules

Modules are also provided for the add-on Android libraries. Add the dependency (listed below) and use the following imports:

  • support-v4: import static org.assertj.android.support.v4.api.Assertions.assertThat;
  • play-services: import static org.assertj.android.playservices.api.Assertions.assertThat;
  • appcompat-v7: import static org.assertj.android.appcompat.v7.api.Assertions.assertThat;
  • mediarouter-v7: import static org.assertj.android.mediarouter.v7.api.Assertions.assertThat;
  • gridlayout-v7: import static org.assertj.android.gridlayout.v7.api.Assertions.assertThat;
  • cardview-v7: import static org.assertj.android.cardview.v7.api.Assertions.assertThat;
  • recyclerview-v7: import static org.assertj.android.recyclerview.v7.api.Assertions.assertThat;
  • palette-v7: import static org.assertj.android.palette.v7.api.Assertions.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 static CustomLayoutAssert assertThat(CustomLayout actual) {
    return new CustomLayoutAssert(actual);
  }

  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;
  }
}

Now static import CustomLayoutAssert.assertThat in your test classes.

For more information about writing custom assertions see the official documentation.

Download

Android module:

androidTestCompile 'com.squareup.assertj:assertj-android:1.1.1'

support-v4 module:

androidTestCompile 'com.squareup.assertj:assertj-android-support-v4:1.1.1'

Google Play Services module:

androidTestCompile 'com.squareup.assertj:assertj-android-play-services:1.1.1'

appcompat-v7 module:

androidTestCompile 'com.squareup.assertj:assertj-android-appcompat-v7:1.1.1'

Design library module:

androidTestCompile 'com.squareup.assertj:assertj-android-design:1.1.1'

mediarouter-v7 module:

androidTestCompile 'com.squareup.assertj:assertj-android-mediarouter-v7:1.1.1'

gridlayout-v7 module:

androidTestCompile 'com.squareup.assertj:assertj-android-gridlayout-v7:1.1.1'

cardview-v7 module:

androidTestCompile 'com.squareup.assertj:assertj-android-cardview-v7:1.1.1'

recyclerview-v7 module:

androidTestCompile 'com.squareup.assertj:assertj-android-recyclerview-v7:1.1.1'

palette-v7 module:

androidTestCompile 'com.squareup.assertj:assertj-android-palette-v7:1.1.1'

Snapshots of the development version are available in Sonatype's snapshots repository.

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.