Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用Robolectric测试自定义视图:宽度和高度始终为0_Android_Robolectric - Fatal编程技术网

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

Android 使用Robolectric测试自定义视图:宽度和高度始终为0,android,robolectric,Android,Robolectric,我已经为绘图应用程序构建了自定义视图(DrawView)。它在很大程度上取决于内部位图的实际宽度和高度。当我尝试用Robolectric 2.2测试它时,视图的长度和宽度为0,这会破坏我的内部逻辑。如何模拟真实的屏幕大小?我使用一个简单的LinearLayout,其中DrawView是要测试的唯一元素。以下是我的布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://

我已经为绘图应用程序构建了自定义视图(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);

  }

}
@RunWith(RobolectrictTestRunner.class)
公共类DrawViewTest{
活动;
DrawView-DrawView;
线性布局;
@以前
public void setUp()引发异常{
ActivityController ActivityController=Robolectric.buildActivity(Activity.class).create().start().resume()
.visible();
Activity=activityController.get();
布局=(LinearLayout)布局从(活动)变平。充气(R.layout.test,null);
drawView=(drawView)layout.findViewById(R.id.drawView);
}
@试验
public void testFloodFill()引发异常{
System.out.println(drawView.getWidth());
drawView.floodFill(新点(1,1),Color.BLACK,FloodFillMode.PIXEL);
位图b=drawView.getDrawingAsNewBitmap();
int-pixel=b.getPixel(2,2);
assertEquals(像素、颜色、黑色);
}
}
正如erd在

Robolectric并没有试图模仿Android——只是假装足够多,这样你就可以编写合理的单元测试了。视图没有宽度或高度并不奇怪,因为我们没有做任何会导致布局过程发生的事情


请查看错误以了解可能的解决方法。

您正在尝试在绘制宽度和高度之前获取它们的参考。首先执行测量,然后调用getMeasuredHeight/Width抱歉,这也不起作用。我在设置方法中尝试了这种方法:drawView.measure(View.MeasureSpec.justice,View.MeasureSpec.justice);System.out.println(drawView.getMeasuredHeight());System.out.println(drawView.getMeasuredWidth());宽度和高度仍然是0。这里的问题不是我没有在Android中获得视图的高度或宽度。它就是不能与机器人分子技术结合使用。@StefanOstermann你找到解决方法了吗?目前正在考虑使用Mockito,但仍不确定。最终我放弃了。。。