2014-03-05 34 views
6

我爲繪圖應用程序構建了自定義視圖(DrawView)。它很大程度上取決於內部位圖的實際寬度和高度。當我嘗試使用Robolectric 2.2進行測試時,視圖的長度和寬度都爲0,這會使我的內部邏輯崩潰。我怎樣才能嘲笑一個真正的屏幕大小?我使用一個簡單的LinearLayout和DrawView作爲測試的唯一元素。這裏是我的佈局:使用Robolectric測試自定義視圖:寬度和高度始終爲0

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/drawViewLayout"> 
    <net.thoster.scribmasterlib.DrawView 
     android:id="@+id/drawView" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     /> 
</LinearLayout> 

這是我的單元測試:

@RunWith(RobolectricTestRunner.class) 
public class DrawViewTest { 
    Activity activity; 
    DrawView drawView; 
    LinearLayout layout; 

    @Before 
    public void setUp() throws Exception { 

    ActivityController<Activity> activityController = Robolectric.buildActivity(Activity.class).create().start().resume() 
     .visible(); 

    Activity activity = activityController.get(); 

    layout = (LinearLayout) LayoutInflater.from(activity).inflate(R.layout.test, null); 
    drawView = (DrawView) layout.findViewById(R.id.drawView); 

    } 

    @Test 
    public void testFloodFill() throws Exception { 
    System.out.println(drawView.getWidth()); 
    drawView.floodFill(new Point(1, 1), Color.BLACK, FloodFillMode.PIXEL); 
    Bitmap b = drawView.getDrawingAsNewBitmap(); 
    int pixel = b.getPixel(2, 2); 
    assertEquals(pixel, Color.BLACK); 

    } 

} 
+0

您正試圖在繪製之前獲取寬度和高度的參考。首先執行一個措施,然後打電話給getMeasuredHeight /寬度 – Tobrun

+0

對不起,那也行不通。我在setUp-Method中試過這種方法: drawView.measure(View.MeasureSpec.EXACTLY,View.MeasureSpec.EXACTLY); System.out.println(drawView.getMeasuredHeight()); System.out.println(drawView.getMeasuredWidth()); 寬度和高度仍然爲0. –

+2

這裏的問題不是我沒有在Android中獲取視圖的高度或寬度。與Robolectric結合使用無法正常工作。 –

回答

1

由於ERD在https://github.com/robolectric/robolectric/issues/819指出...

Robolectric是不是想模仿Android的 - 只是假的,所以你可以寫出合理的單元測試。我不覺得視圖沒有寬度或高度,因爲我們沒有做任何會導致佈局傳遞發生的事情。

請查看潛在解決方法的錯誤。

相關問題