Question

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.

Was it helpful?

Solution 2

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

    ...

}

OTHER TIPS

It's really simple in Robolectric 3.0, you add it directly to the @Config annotation.

@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21,application = TestApplication.class)
public class ActivityTest {

You can configure it in the file org.robolectric.Config.properties

application = <fully qualified name of the Application>

See http://robolectric.org/configuring/

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top