robolectric - 运行 Robolectric 测试时来自 LeakCanary 的 NullPointerException

标签 robolectric leakcanary

将 LeakCanary (1.3) 添加到我的应用程序中:

@Override
public void onCreate() {
    super.onCreate();
    Fabric.with(this, new Crashlytics());
    LeakCanary.install(this);

当我为我的应用程序运行 Robolectric 测试套件时,我在 LeakCanary 中得到一个 NullPointerException。
Caused by: java.lang.NullPointerException
at com.squareup.leakcanary.LeakCanary.isInServiceProcess(LeakCanary.java:165)
at com.squareup.leakcanary.LeakCanary.isInAnalyzerProcess(LeakCanary.java:141)
at com.squareup.leakcanary.LeakCanary.install(LeakCanary.java:52)
at com.squareup.leakcanary.LeakCanary.install(LeakCanary.java:43)
at com.package.application.MyApplication.onCreate(MyApplication.java:50)
at org.robolectric.internal.ParallelUniverse.setUpApplicationState(ParallelUniverse.java:131)
at org.robolectric.RobolectricTestRunner.setUpApplicationState(RobolectricTestRunner.java:431)
at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:224)

我补充说,我使用 Crashlytics 指出它(以及其他方法)接收相同的应用程序,但不会抛出任何异常。

不确定这应该在这里还是在 LeakCanary 的 GitHub 问题上。还有其他人遇到这个问题吗?

最佳答案

将我的评论转换为答案。
Robolectric通过测试应用程序提供处理不同初始化和应用程序测试生命周期的方法。

这是您的应用程序类:

public class <YourAppplication> extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Fabric.with(this, new Crashlytics());
        LeakCanary.install(this);
    }
}

您应该将测试源放在与您的下一个类(class)的应用程序相同的包中:
public class Test<YourAppplication> extends <YourApplication> {
    @Override
    public void onCreate() {
    }
}
Robolectric将加载它而不是您的应用程序。如您所见,我禁止了您的应用程序中的所有静态初始化。

您可以找到更多详情 here

关于robolectric - 运行 Robolectric 测试时来自 LeakCanary 的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30169678/

相关文章:

Android Media player 保留应用程序实例并导致内存泄漏

Android fragment 管理器内存泄漏

android - 为 Gradle 设置 Deckard。 Robolectric 测试错误

android - 我可以使用 Robolectric 对静态库 jar 进行单元测试吗?

android - Robolectric Run Handler 帖子

android - 了解 ViewTreeObserver 泄漏

android - 更改太多布局的可见性可能会导致性能问题吗?

android - 使用 LeakCanary 在 AppCompatActivity 上发生内存泄漏

android - Robolectric:actionBar.hide() 返回 Null

android - 使用 Robolectric 2.X 创建自定义阴影