如何测试 Android ContentProvider 中抛出的异常

发布于 2024-10-15 11:36:24 字数 1059 浏览 1 评论 0原文

我正在尝试测试我的 contentprovider 的 getType 方法,特别是当传入无效的 uri 时。当前我抛出 IllegalArgumentException,但在我的测试中没有捕获异常。

这是我的测试

public void testIllegalArgumentExceptionThrownForInvalidUri() {
    Uri badUri = Uri.parse("content://" + NoteProvider.AUTHORITY  + "/somethingelse");

    try {
        String type = mockResolver.getType(badUri);
        fail("No exception thrown");
    } catch (Exception ex) {
        assertEquals(IllegalArgumentException.class, ex.getCause().getClass());
    }
}

和 getType 的实现,

@Override
public String getType(Uri uri) {
    switch (uriMatcher.match(uri)) {
        case URI_NOTES:
            return Notes.CONTENT_TYPE;
        case URI_NOTE_ID:
            return Notes.CONTENT_ITEM_TYPE;
        default:
            throw new IllegalArgumentException("Unknown URI " + uri);
    }
}

我已经单步执行了它并且可以看到抛出了异常,但在测试中调用的是 failed() 方法而不是 catch 块。

MockContentResolver 是否会吞掉异常?

免责声明:虽然我已经用 C# 编码很多年了,但我还是 android 和 java 的新手,所以我可能在做一些完全愚蠢的事情。 :D

I am trying to test the getType method of my contentprovider, particularly when an invalid uri is passed in. Currently I throw an IllegalArgumentException, but no exception is caught in my test.

Here is my test

public void testIllegalArgumentExceptionThrownForInvalidUri() {
    Uri badUri = Uri.parse("content://" + NoteProvider.AUTHORITY  + "/somethingelse");

    try {
        String type = mockResolver.getType(badUri);
        fail("No exception thrown");
    } catch (Exception ex) {
        assertEquals(IllegalArgumentException.class, ex.getCause().getClass());
    }
}

and the implementation of getType

@Override
public String getType(Uri uri) {
    switch (uriMatcher.match(uri)) {
        case URI_NOTES:
            return Notes.CONTENT_TYPE;
        case URI_NOTE_ID:
            return Notes.CONTENT_ITEM_TYPE;
        default:
            throw new IllegalArgumentException("Unknown URI " + uri);
    }
}

I have stepped through it and can see that the exception is thrown, but in the test the fail() method is being called instead of the catch block.

Does the MockContentResolver swallow exceptions?

Disclaimer: I am new to android and java although have been coding in C# for quite a few years now, so I may be doing something completely stupid. :D

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

暖风昔人 2024-10-22 11:36:24

请勿投掷。返回空值。根据 ContentResolver.getType() 的文档

返回内容的 MIME 类型,如果 URL 无效或类型未知,则返回 null

Do not throw. Return null. Per ContentResolver.getType()'s documentation,

Returns A MIME type for the content, or null if the URL is invalid or the type is unknown

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文