10

根据这个链接,我可以创建一个测试应用程序,Robolectric 将自动开始在测试中使用。我不能让它工作。

我正在使用 Dagger 进行依赖注入,并为ActivityApplication. 然后我的每个活动都扩展了包装活动类而不是普通的 old Activity

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

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

我创建了一个测试应用程序,但仍然收到相同的测试错误,因为测试没有在这个测试应用程序下运行。我尝试将测试应用程序移动到不同的包等,但没有任何变化。

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

4

3 回答 3

17

在 Robolectric 3.0 中真的很简单,你直接将它添加到@Config注解中。

@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21,application = TestApplication.class)
public class ActivityTest {
于 2016-05-04T21:37:08.327 回答
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();
        }
    }

    ...

}
于 2014-03-29T15:29:36.317 回答
5

您可以在文件 org.robolectric.Config.properties 中配置它

application = <fully qualified name of the Application>

http://robolectric.org/configuring/

于 2015-01-20T11:46:14.610 回答