使用Robolectric测试自定义视图:宽度和高度始终为0

10

我已经为绘图应用程序构建了一个自定义视图(DrawView)。它在内部位图上严重依赖实际的宽度和高度。当我尝试使用Robolectric 2.2测试时,该视图的长度和宽度为0,导致我的内部逻辑崩溃。我该如何模拟真实屏幕大小?我使用一个简单的LinearLayout,并将DrawView作为其中唯一的元素进行测试。这是我的布局:

<?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);

  }

}

在它们被绘制之前,您正在尝试获取宽度和高度的引用。首先执行测量,然后调用getMeasuredHeight/Width。 - Tobrun
很抱歉,那也不起作用。 我在setUp-Method中尝试了这种方式:drawView.measure(View.MeasureSpec.EXACTLY,View.MeasureSpec.EXACTLY);System.out.println(drawView.getMeasuredHeight());System.out.println(drawView.getMeasuredWidth());宽度和高度仍为0。 - Stefan Ostermann
2
问题不在于我无法获取Android视图的高度或宽度,而是它与Robolectric组合使用时无法正常工作。 - Stefan Ostermann
@StefanOstermann 你有找到解决方法吗?我正在研究使用Mockito,但仍不确定。 - John Shelley
1
最终我放弃了... - Stefan Ostermann
1个回答

3

正如 erd 在 https://github.com/robolectric/robolectric/issues/819 中指出的那样...

Robolectric 不是试图模拟 Android - 只是伪造足够多的内容,以便您可以编写合理的单元测试。这并不让我感到惊讶,因为我们没有做任何会导致布局传递发生的事情,所以视图没有宽度或高度。

请参见错误以获取潜在的解决方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接