当前位置: 首页 > 知识库问答 >
问题:

使用LoaderTestCase测试异常

长孙阳州
2023-03-14

在我的Android JUnit测试用例中,一个< code>LoaderTestCase,我想测试我的加载器是否抛出异常或返回null。我看到测试中抛出了< code > NullPointerException ,测试被中止。

我正在尝试捕捉这样的异常:

try {
    getLoaderResultSynchronously(new HistoricDataLoader(getContext(), url, username, password,
        https, md5, station, stationMetaData, from, to));
    // Expected exception wasn't thrown: fail.
    fail();
} catch (NullPointerException e) {
    // Expected exception was thrown. Success.
    Log.e(TAG, e.getMessage());
}

但是LoaderTestCase没有捕获异常,而是中止,并出现以下异常:

java.lang.NullPointerException
        at java.util.concurrent.ArrayBlockingQueue.checkNotNull(ArrayBlockingQueue.java:126)
        at java.util.concurrent.ArrayBlockingQueue.offer(ArrayBlockingQueue.java:295)
        at java.util.AbstractQueue.add(AbstractQueue.java:66)
        at java.util.concurrent.ArrayBlockingQueue.add(ArrayBlockingQueue.java:282)
        at android.test.LoaderTestCase$2.onLoadComplete(LoaderTestCase.java:70)
        at android.content.Loader.deliverResult(Loader.java:144)
        at android.content.AsyncTaskLoader.dispatchOnLoadComplete(AsyncTaskLoader.java:265)
        at android.content.AsyncTaskLoader$LoadTask.onPostExecute(AsyncTaskLoader.java:92)
        at android.os.AsyncTask.finish(AsyncTask.java:632)
        at android.os.AsyncTask.access$600(AsyncTask.java:177)
        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5086)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
        at dalvik.system.NativeStart.main(Native Method)

你能告诉我我该怎么做吗

  • 在我的方法 HistoricDataLoader#loadInBackground() 中抛出的测试异常
  • 将 null 作为有效的返回值?

编辑:

我知道如何在 JUnit 4 中测试异常。现在我正在使用 JUnit 3 进行 Android 测试,因此我像代码中所示的那样捕获它们。如果你的回答是我应该使用 JUnit 4 而不是 JUnit 3,请解释为什么这会有所作为。引发异常并中止方法getLoaderResultSyncly()中的测试。它没有传递到调用链上,所以我看不出 JUnit 4 应该如何能够捕获它。

共有1个答案

丁振海
2023-03-14

在jUnit 4中,你可以期待使用注释的异常,你的代码可能看起来像这样:

    @Test(expected=NullPointerException.class)
    public void loaderNpe() {
        getLoaderResultSynchronously(new HistoricDataLoader(getContext(), url,    username, password,vhttps, md5, station, stationMetaData, from, to));
    }
 类似资料:
  • 试图利用本SO帖子中概述的方法。 我有以下类型的例外: 这个函数抛出它: 这项工作: 但这并不: 有人知道为什么后者不起作用吗?笑话日志:

  • 我正在用PHP创建一个应用程序,我想集成Twilio API来发送短信。我只想处理出站消息。我使用的是官方的Twilio-PHP包装器库。

  • 如何使用Spock以良好的方式(例如数据表)测试异常? 示例:具有一个方法,该方法可以抛出不同消息的异常,或者如果用户有效,则不抛出异常。 规范类本身: 变体1 这一个正在运行,但真正的意图被所有的when/then标签和反复调用弄得一团糟。 变式2 这个不工作,因为Spock在编译时提出了这个错误: 异常条件只允许在'然后'块 变式3 这个不工作,因为Spock在编译时提出了这个错误: 异常条件

  • 在一个如下的四节点环境中, 如果sentinel monitor的quorum设置为3,则宕机一台后再宕机,此时还剩余两台,存在两个sentinel,两个slave。由于quorum为3,而必须有>=max(quorum, num(sentinels)/2 +1) = max(3,2) = 3个sentinel都同意其中某一个sentinel主持failover,因此此时无sentinel可主持切

  • 全部: 我对Jasmine测试非常陌生,我想知道的一个关于异步测试的问题是: 有谁能简单解释一下Jasmine是如何知道里面有一个done()函数调用并等待它完成的? 例如,如果我把一些异步调用在之前: Jasmine怎么知道它应该让规范测试等待? 谢谢

  • 恢复集群状态,2.128为主,2.129、2.130为从。首先进行一个从网络分离的测试: 此时集群状态为(从master看): 此时切断2.130这个链路,2.128和2.129分别为主从形成一个集群,2.130会失败,因为没有足够的sentinel进行投票完成failover。剩余集群如下: 第三台机器则为slave失败状态: 此时由于没有发生切换,因此对应用没有影响。 另一种情况,如果将主机网