如何测试Android ContentProvider中引发的异常

如何测试Android ContentProvider中引发的异常

问题描述:

我想测试我的contentprovider的getType方法,特别是当传入无效的uri时。目前我抛出IllegalArgumentException,但在我的测试中没有发现异常。如何测试Android ContentProvider中引发的异常

这里是我的测试

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

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

我已经通过它加强,可以看到,抛出异常的getType的实施,但在测试中失败()方法被调用而不是catch块。

MockContentResolver是否吞下异常?

声明:我是新来的android和java,虽然已经在C#编码了好几年了,所以我可能会做一些完全愚蠢的事情。 :D

不要扔。返回null。每ContentResolver.getType()'s documentation

返回 MIME类型的内容,或NULL,如果URL无效或者类型是未知