我目前正在将 robolectric 从版本 1 升级到版本 2。在我当前的版本中,我使用以下内容为 roboguice 提供测试模块(用于绑定(bind))。
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 的类,并在 list 中引用它。然后我像这样创建一个类
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会建议测试模块需要在同一个包中,但是我将所有测试都放在不同的包中。我该如何解决这个问题?
最佳答案
您的 TestApplication
类应该扩展您自己的 Application
类,而不是 android.app.Application
,并且它应该与你的应用程序
。
... however I have all tests in a different package.
这应该不是问题。将您的 TestApplication
放入您的测试模块中,但使用来自 Application
的包。
例如,如果您使用的是 Maven,则文件将位于此处:
src/main/java/com/example/Application.java
src/test/java/com/example/TestApplication.java
关于android - 使用 Robolectric 2 时为 RoboGuice 添加测试模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19228895/