Robolectric不使用测试应用程序。

10
根据这个链接,我可以创建一个测试应用程序,Robolectric将自动在测试中启动。但我无法使其工作。
我正在使用Dagger进行依赖注入,并为ActivityApplication创建了注入包装类。然后我的每个活动都扩展了包装活动类,而不是普通的Activity
问题是,在测试中,Application模块提供的依赖关系无法解析,导致测试失败。这是因为我们大多数测试只是构建一个活动(使用Robolectric.buildActivity()),而不是从Application运行。
我希望能以某种方式修改Robolectric testrunner,以在Application下运行我们的测试。或者像上面链接中概述的那样使用测试应用程序。
我已经创建了一个测试应用程序,但仍然遇到相同的测试错误,因为测试未在此测试应用程序下运行。我尝试将测试应用程序移动到不同的包等,但没有任何变化。
我正在寻求如何实现我的愿望的建议。特别是对具有Dagger经验并且知道如何进行测试的人感兴趣。

分享代码。我不理解“在应用程序下运行我们的测试”。我们使用带有Dagger的Robolectric,并且我们的测试应用程序正常工作。 - Eugen Martynov
3个回答

17

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

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

5

1
仅供更新,这在3.0中不再适用。现在文件名为robolectric.properties。 - Leo supports Monica Cellio

5

抱歉,我忘记了这个。为了解决这个问题,我创建了一个沿着测试的.然后我修改了我们的(继承)如下:

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

    ...

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接