在 Robolectric 中测量 TextView

问题描述 投票:0回答:2

据我所知,在

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 大小?

android robolectric
2个回答
3
投票

正确的答案是它没有在 Robolectric 中实现。然而。唯一相关的函数是

Paint
measureText
,它仅返回文本长度。看来我必须为此自己扩展 Robolectric。


0
投票

我知道已经过去很多年了,但 Robolectric 的默认行为并没有改变。 但是,有一种本机图形模式,在这些情况下可能效果更好。 将其添加到您的测试方法中:

@Test
@GraphicsMode(GraphicsMode.Mode.NATIVE)
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.