Android - 在单元测试中查看getHeight

时间:2017-04-27 03:39:48

标签: android unit-testing android-testing

我有一个扩展LinearLayout

的类
public MyLayout extends LinearLayout {
    public MyLayout(Context context) {
        super(context);
    }

    // Some override functions
    @Override
    public void ...
}

由于它是一个自定义类,我创建单元测试来验证其layout_weight,尽管没有任何覆盖函数可以修改它。

@Test
public void testWeight() {
    View view_1 = new View(mContext);
    view_1.setLayoutParams(new LayoutParams(mWidth_1, 0, mWeight_1));
    // Attempt 5
    view_1.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            // Never get called
            view_1.getHeight();
        }
    });

    View view_2 = new View(mContext);
    view_2.setLayoutParams(new LayoutParams(mWidth_2, 0, mWeight_2));

    MyLayout myLayout = new MyLayout(mContext);
    myLayout.setOrientation(LinearLayout.VERTICAL);
    myLayout.addView(view_1);
    myLayout.addView(view_2);

    // Attempt 1
    myLayout.onFinishInflate()
    view_1.getHeight();

    // Attempt 2
    myLayout.layout(0, 0, 1080, 1920);
    view_1.getHeight();

    // Attempt 3
    myLayout.draw(new Canvas());
    view_1.getHeight();

    // Attempt 4
    myLayout.onWindowFocusChanged(true);
    view_1.getHeight();

    SystemClock.sleep(1000);
}

我知道view可能不会在其生命周期的某个时刻被夸大,但我所做的所有尝试都返回0.在没有{的情况下获取视图维度的正确方法是什么{1}}?提前谢谢。

1 个答案:

答案 0 :(得分:0)

回答我自己的问题。我找到的解决方法是创建一个Activity并添加我想要测试的自定义布局。然后使用ActivityTestRule启动活动。

@Rule
public ActivityTestRule<MyTestActivity> mActivityRule = new ActivityTestRule<>(MyTestActivity.class);

@Test方法运行之前,视图将被充气并准备好进行测试。查看更多内容ActivityTestRule