fdsczk 2017-08-29 11:38 采纳率: 0%
浏览 402

android单元测试怎样测如下函数

private String getSelectedConnectTypeKey() {
int re_way = Settings.System.getInt(getContentResolver(),"auto_recorder",0);
switch(re_way){
case 0:
return "null";
case 1:
return "all";
case 2:
return "part";
default:
return "invalidate";
}
}
如上函数,使用反射进行单元测试报错:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.ContentResolver android.content.Context.getContentResolver()

求教怎莫办?
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-06 09:46
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Android的单元测试中,你不能直接通过反射访问或调用getSelectedConnectTypeKey()方法。这是因为这个方法是根据系统设置(Settings)中的值来返回一个字符串。

    然而,你可以模拟这种行为,例如通过Mockito或者JUnit的assertThrows方法。以下是一个简单的例子:

    import static org.mockito.Mockito.mock;
    import static org.mockito.Mockito.when;
    
    public class TestMyClass {
        private MyClass myClass;
        private ContentResolver contentResolver;
    
        @Before
        public void setUp() throws Exception {
            myClass = mock(MyClass.class);
            when(myClass.getConnectedType()).thenReturn("invalid");
            contentResolver = mock(ContentResolver.class);
        }
    
        @Test
        public void testGetSelectedConnectTypeKey() {
            // When
            String result = myClass.getSelectedConnectTypeKey();
    
            // Then
            assertEquals("invalid", result);
        }
    }
    

    在这个例子中,我们首先创建了一个Mock对象myClass和contentResolver。然后我们在test方法中模拟了getSelectedConnectTypeKey()的方法,并检查结果是否等于"invalid"。这样我们就能够验证我们的逻辑是否正确处理了预期的情况。

    注意:这只是一个基本的例子,实际的测试可能需要更复杂的mocking策略,以确保所有的依赖都被正确地模拟出来。

    评论

报告相同问题?