Robolectric not using test application

android, dagger, robolectric

Solution

Apologies, forgot about this. To resolve this I created a `TestApplication` residing along side the tests. Then I modified our `TestRunner` (which extends the `RobolectricTestRunner`) to:

public class TestRunner extends RobolectricTestRunner {

    public TestRunner(final Class<?> testClass) throws InitializationError {
        super(testClass);
    }

    ...

    @Override
    protected Class<? extends TestLifecycle> getTestLifecycleClass() {
        return MyTestLifecycle.class;
    }

    public static class MyTestLifecycle extends DefaultTestLifecycle {
        @Override
        public Application createApplication(final Method method, final AndroidManifest appManifest) {
            // run tests under our TestApplication
            return new TestApplication();
        }
    }

    ...

}

Problem

According to this link I can create a test application which Robolectric will automatically start using in tests. I cannot get this to work. I am using Dagger for dependency injection and have created injection wrapper classes for `Activity` and `Application`. Then each of my activities extends the wrapper activity class instead of plain old `Activity`. The problem I am having is that, in tests, the dependencies provided by the `Application` modules can't be resolved and so the tests fail. This is because most of our tests are just building an activity (using `Robolectric.buildActivity()`) and aren't running from an `Application`. I was hoping to somehow modify the Robolectric testrunner to run our tests under the `Application`. Either that or use a test application as outlined in that link above. I've created a test application and am still getting the same test errors because the tests aren't running under this test application. I've tried moving the test application to different packages etc, but nothing changes. I'm looking for some advice on how to go about doing what I want. Would be particularly interested in those with experience with Dagger and how they go about testing.

Original source