上述實例中,@Implements是聲明Shadow的對象,@RealObject是獲取一個Android 對象,constructor則是該Shadow的構造函數,Shadow還可以修改一些函數的功能,只需要在重載該函數的時候添加@Implementation,這種方式可以有效擴展Robolectric的功能。
Shadow是通過對真實的Android對象進行函數重載、初始化等方式對Android對象進行擴展,Shadow出來的對象的功能接近Android對象,可以看成是對Android對象一種修復。自定義的Shadow需要在config中聲明,聲明寫法是@Config(shadows=ShadowPoint.class)。
Mock寫法介紹
對于一些依賴關系復雜的測試對象,可以采用Mock框架解除依賴,常用的有Mockito。例如Mock一個List類型的對象實例,可以采用如下方式:
所得到的list對象實例便是List類型的實例,如果不采用mock,List其實只是個接口,我們需要構造或者借助ArrayList才能進行實例化。與Shadow不同,Mock構造的是一個虛擬的對象,用于解耦真實對象所需要的依賴。Mock得到的對象僅僅是具備測試對象的類型,并不是真實的對象,也就是并沒有執行過真實對象的邏輯。
原文轉自:http://tech.meituan.com/Android_unit_test.html