Skip to main content

Tired of testing - take some Espresso!


Recently Google announced the new testing tool Espresso for Android - a simple API for writing reliable UI tests. So, I'd like to share with you some information about it and what I've experienced using it so far. 

At first Espresso tool was not announced alone, it is used together with GoogleInstrumentationTestRunner - an improved InstrumentationTestRunner. That means that you have to claim it's usage in AndroidManifest.xml file of your test application and set it in test project Run Configurations.  

Espresso set up instructions are quite clear, at least for Eclipse IDE. If everything goes well you'll manage to run first test in 30 minutes. 

Keep in mind following points which I hope will help you to save some time before starting:
  • you have to check that your test project and project under test have no reused libraries. Most common one is android-support-v4.jar. You have to remove them from test project. Having jars in both projects will lead to below issue
    android.test.suitebuilder.TestSuiteBuilder$FailedToCreateTests
  • set up to every test in Eclipse Run->Run Configurations with GoogleInstrumentationTestRunner if you'd like to run concrete test from your project.
  • there is no support of testing navigation drawer element yet but under this link you can find a workaround. Seems that official support of this feature will be added soon.
  • if the element you want to perform action on is not visible on device screen - you have to scroll to it first or, in case of lists, use onData() method.
What I personally like in Espresso:
  1. fast tests execution. Comparing to Robotium, Espresso's test are running much more faster (up to 3-4 times).
  2. you don't need to care about waitForActivity anymore, Espresso will handle this for you.
  3. responsive support - you may ask question in Google group - android-test-kit.
  4. clear test commands.
  5. you can run your tests from command line which allows you to integrate them into CI process.
  6. possibility to write multiply instructions for one element in one command:
onView(withId(is(R.id.edit_password))).perform(
    scrollTo(),
    click(),
    typeText(password),
    closeSoftKeyboard());
What I don't like:
  1. (and like the same time) to fully use the power of onData() command you must implement matchers by yourself, but when you got how to do it they become the real powerful tool for you.
  2. you have to handle delayed response from server request before continuing with a test - example is here.
  3. lack of documentation that covers all Espresso's features.
Summarizing all above I'd like to say that at first glance it seems that Espresso's API is clear and understandable but after some time you understand that it requires deeper development knowledge. Seems that Espresso is targeting more developers audience than testers.

And taking into consideration that Google takes care of it, this tool probably will grow as a snow ball in the nearest feature. So, keep monitoring ;)


Comments

Popular posts from this blog

Discovering Espresso for Android: matching and asserting view with text.

After more than a month of using great test tool from Google - Espresso for Android, I'd like to share with you some of my experience. I assume that you've already added espresso jar into your project, spent some time playing with Espresso samples and have basic understanding how this tool works. In this post I'll show how to match particular view with text or assert that it contains (or not) specified Strings. Before we start, you have to take a look at Hamcrest matchers - Hamcrest tutorial and API Reference Documentation , which are used together with Espresso's ViewAssertions and ViewMatchers and included into Espresso standalone library. Pay more attention to Matcher<java.lang.String> matchers. So, here we go. For simplicity following String "XXYYZZ" will be used as a expected text pattern. Espresso ViewMatchers class implements two String matcher methods withText() and withContentDescription() which will match a view which text is equal

Discovering Espresso for Android: creating custom Matchers.

Hi! This time I'll talk about custom Matchers that can be used with Espresso for Android (and not only). We'll go through steps how to create them and I'll provide you examples of already existing and very useful ones. First of all a couple of words about Hamcrest library , which provides us with common matchers and possibility to create custom matchers, to pay tribute to it's authors. From Humcrest project main page - Hamcrest provides a library of matcher objects (also known as constraints or predicates) allowing 'match' rules to be defined declaratively, to be used in other frameworks. Typical scenarios include testing frameworks, mocking libraries and UI validation rules. In one of my previous post I've described already how to use some custom Hamcrest matchers. The base idea is that matcher is initialized with the expected values, which are compared against the actual object we are matching when invoking it. Among of the common matchers you

Preparing android emulator for UI test automation.

This post is about setting up android emulator for UI test automation. Properly configured emulator is the basis for reliable tests. Hundreds or thousands of professionally written test cases is great but if they become flaky because of the environment they are running on, their value reduces a lot. I will give you a couple of advices I'm following in my test automation projects. In general we will go through below topics: Managing emulator system animations Controlling soft keyboard appearance Changing emulator system locale Tweaking first and second points will reduce to minimum flakiness in our automated tests which can be caused by emulator. For those who are lazy to read the whole article at the bottom of the post I shared youtube video where I describe the same points with one more additional hint on top :) 1. There are three types of system animation we may control: window animation scale transition animation scale animator duration scale Emulator