Robolectric不使用测试应用程序

时间:2014-02-12 10:33:32

标签: android robolectric dagger

根据this link,我可以创建一个测试应用程序,Robolectric将自动开始在测试中使用。我无法让它发挥作用。

我使用Dagger进行依赖注入,并为ActivityApplication创建了注入包装类。然后,我的每个活动都扩展了包装器活动类,而不是普通的旧Activity

我遇到的问题是,在测试中,Application模块提供的依赖关系无法解析,因此测试失败。这是因为我们的大多数测试只是构建一个活动(使用Robolectric.buildActivity()),而不是从Application运行。

我希望以某种方式修改Robolectric testrunner以在Application下运行我们的测试。或者使用上面链接中概述的测试应用程序。

我已经创建了一个测试应用程序,但仍然遇到相同的测试错误,因为测试未在此测试应用程序下运行。我已经尝试将测试应用程序移动到不同的软件包等,但没有任何改变。

我正在寻找关于如何做我想做的事的一些建议。对那些有Dagger经验以及如何进行测试的人特别感兴趣。

3 个答案:

答案 0 :(得分:14)

在Robolectric 3.0中非常简单,您可以直接将其添加到@Config注释中。

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

答案 1 :(得分:5)

道歉,忘掉了这一点。为了解决这个问题,我在测试旁边创建了一个TestApplication。然后我将TestRunner(将RobolectricTestRunner扩展为)修改为:

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

    ...

}

答案 2 :(得分:3)

您可以在文件org.robolectric.Config.properties

中对其进行配置
application = <fully qualified name of the Application>

请参阅http://robolectric.org/configuring/