在Robolectric中测量TextView

时间:2014-05-14 18:10:18

标签: android robolectric

据我所知,在measure(0, 0)上调用TextView会导致视图将其测量的宽度和高度设置为当前字体/文字大小所需的最小值:

public class TextViewSizeTest extends AndroidTestCase {
    public void testTextWidth() {
        TextView view = new TextView(getContext());
        view.setTextSize(42);
        view.setText("test");
        view.measure(0, 0);
        assertEquals(212, view.getMeasuredWidth());
    }
}

魔法数字212是正确的答案 - 测试通过。

但是android单元测试并不是很快 - 所以我尝试使用Robolectric。

@RunWith(RobolectricTestRunner.class)
public class TextViewSizeTest {
    @Test
    public void testTextWidth() {
        TextView view = new TextView(Robolectric.application);
        view.setTextSize(42);
        view.setText("test");
        view.measure(0, 0);
        assertThat(view.getMeasuredWidth(), equalTo(212));
    }
}

现在这个测试失败了:

java.lang.AssertionError: 
Expected: <212>
    but: was <0>

所以问题是 - 我是否在测试设置/初始化中遗漏了一些东西,或者在Robolectric中没有正确测量TextView大小的确存在问题?

1 个答案:

答案 0 :(得分:2)

正确的答案是它没有在Robolectric中实现。然而。唯一相关的函数是Paint的{​​{1}},只返回文本长度。看来我必须自己扩展Robolectric。