2016-06-28 19 views
6

Tôi tự hỏi liệu có anyway để khai báo giá trị của Build.Version.SDK_INT không? Giả sử tôi có các dòng sau trong số ClassUnderTest:Giá trị sơ khai của Build.VERSION.SDK_INT trong thử nghiệm đơn vị địa phương

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
    //do work 
}else{ 
    //do another work 
} 

Làm cách nào để có thể bao gồm tất cả mã?

Tôi muốn chạy hai thử nghiệm với SDK_INT khác nhau để nhập cả hai khối.

Có thể trong android địa phương kiểm tra đơn vị sử dụng Mockito/PowerMockito?

Cảm ơn

Trả lời

19

Thay đổi giá trị bằng cách sử dụng phản chiếu.

static void setFinalStatic(Field field, Object newValue) throws Exception { 
    field.setAccessible(true); 

    Field modifiersField = Field.class.getDeclaredField("modifiers"); 
    modifiersField.setAccessible(true); 
    modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL); 

    field.set(null, newValue); 
} 

Và sau đó

setFinalStatic(Build.VERSION.class.getField("SDK_INT"), 123); 

Nó được thử nghiệm. Công trinh.

+0

Điều đó sẽ không hoạt động vì getField() dự kiến ​​cho tên biến và Build.VERSION.SDK_INT thực sự là một giá trị. –

+3

setFinalStatic (Build.VERSION.class.getField ("SDK_INT"), "123"); Nếu điều này không hoạt động có thể PowerMockito trên mockito và giả lập trường tĩnh. – toshkinl

+0

Cảm ơn! Đã làm việc! –

Các vấn đề liên quan