首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行Robolectric测试时来自LeakCanary的NullPointerException

运行Robolectric测试时来自LeakCanary的NullPointerException
EN

Stack Overflow用户
提问于 2015-05-11 21:59:22
回答 2查看 1.4K关注 0票数 16

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

代码语言:javascript
复制
@Override
public void onCreate() {
    super.onCreate();
    Fabric.with(this, new Crashlytics());
    LeakCanary.install(this);

当我为我的应用程序运行Robolectric测试套件时,我在LeakCanary中得到了一个NullPointerException。

代码语言:javascript
复制
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问题上。还有没有人遇到过这个问题?

EN

回答 2

Stack Overflow用户

发布于 2015-05-16 03:44:15

将我的评论转换为答案。

Robolectric提供了通过测试应用处理不同初始化和应用测试生命周期的方法。

下面是你的应用程序类:

代码语言:javascript
复制
public class <YourAppplication> extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Fabric.with(this, new Crashlytics());
        LeakCanary.install(this);
    }
}

代码语言:javascript
复制
public class Test<YourAppplication> extends <YourApplication> {
    @Override
    public void onCreate() {
    }
}

Robolectric将加载它,而不是您的应用程序。正如你所看到的,我从你的应用程序中禁止了所有的静态初始化。

您可以在here找到更多详细信息

票数 15
EN

Stack Overflow用户

发布于 2016-07-27 05:53:36

避免NullPointerException的一种简单方法是在LeakCanary的testCompile指令中指定build.gradle中的发布(no-op)版本,从而禁用build.gradle的单元测试。例如:

代码语言:javascript
复制
dependencies {
    ...
    testCompile (
        'junit:junit:4.12',
        'org.robolectric:robolectric:3.0',
        'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1'
    )
    ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30169678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档