使用Robolectric 2时为RoboGuice添加测试模块

时间:2013-10-07 15:36:53

标签: android robolectric roboguice

我正在将robolectric从版本1升级到2.在我当前的版本中,我使用以下内容为roboguice提供测试模块(用于绑定)。

public class RoboTestRunner extends RobolectricTestRunner {

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

    @Override
    public void prepareTest(Object test) {
        Application app = Robolectric.application;
        RoboGuice.setBaseApplicationInjector(app, RoboGuice.DEFAULT_STAGE,
                Modules.override(RoboGuice.newDefaultRoboModule(app)).with(new
                        TestModule()));
        Injector injector = RoboGuice.getInjector(app);
        injector.injectMembers(test);
    }

}

但是现在我已经升级了prepareTest方法,不在这个类中。我应该在新版本中运行此代码?

更新

我找到了这样做的方法。我需要创建一个在项目中扩展android.app.Application的类,并在Manifest中引用它。然后我创建一个类似的类

public class TestApplication extends Application implements TestLifecycleApplication {

    @Override
    public void onCreate() {
        super.onCreate();

        RoboGuice.setBaseApplicationInjector(this, RoboGuice.DEFAULT_STAGE,
                RoboGuice.newDefaultRoboModule(this), new TestModule());
    }

    @Override
    public void beforeTest(Method method) {}

    @Override
    public void prepareTest(Object test) {
        TestApplication application = (TestApplication) Robolectric.application;

        RoboGuice.setBaseApplicationInjector(application, RoboGuice.DEFAULT_STAGE,
                RoboGuice.newDefaultRoboModule(application), new TestModule());

        RoboGuice.getInjector(application).injectMembers(test);
    }

    @Override
    public void afterTest(Method method) {}

}

由于此类在开始时有测试,因此robolectric应自动找到并使用它。然而,这似乎并没有发生。有人知道为什么吗?

更新2

This blog会建议testmodule需要在同一个包中,但是我在不同的包中进行了所有测试。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您的TestApplication课程应扩展您自己的Application课程,而不是android.app.Application课程,并且该课程应与您的Application位于同一个课程中。

  

...但是我在不同的包中进行了所有测试。

那应该不是问题。将您的TestApplication放入测试模块,但请使用Application中的包。

例如,如果您使用的是maven,则文件将存在于此处:

src/main/java/com/example/Application.java src/test/java/com/example/TestApplication.java