【问题标题】:Adding Test Module for RoboGuice When Using Robolectric 2使用 Robolectric 2 时为 RoboGuice 添加测试模块
【发布时间】:2013-10-07 15:36:53
【问题描述】:

我目前正在将 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 需要在同一个包中,但是我将所有测试都放在不同的包中。我该如何解决这个问题?

【问题讨论】:

  • 你发现了吗?
  • @amadib 使用 robolectric 3,这是一个相当简单的设置

标签: android robolectric roboguice


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 问题是我的包是这样设置的.. src/main/java/com/example/Application.java src/test/java/com/test/TestApplication.java 我意识到当您发布答案时。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多