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



我目前正在将机器人从版本 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的类,并在清单中引用它。然后我创建一个这样的类

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) {}
}

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

更新 2

这个博客建议测试模块需要在同一包中,但是我将所有测试都放在不同的包中。我该如何解决此问题?

你的TestApplication类应该扩展你自己的Application类,而不是android.app.Application,它应该与你的Application在同一个包中。

。但是我将所有测试都放在不同的包中。

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

例如,如果您使用的是 Maven,则文件将位于此处:

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

最新更新