android-如何使用Mockito模拟DisplayMetrics

android-如何使用Mockito模拟DisplayMetrics,第1张

概述我有一个自定义视图,我正在尝试针对不同的屏幕尺寸进行测试,但无法找到有关如何在单元测试中正确模拟显示宽度的文档或示例.这是我尝试使用此方法的示例:privateCustomTextViewcustomTV;@OverrideprotectedvoidsetUp()throwsException{super.setUp();Displa

我有一个自定义视图,我正在尝试针对不同的屏幕尺寸进行测试,但无法找到有关如何在单元测试中正确模拟显示宽度的文档或示例.

这是我尝试使用此方法的示例:

private CustomTextVIEw customTV;@OverrIDeprotected voID setUp() throws Exception {    super.setUp();    displayMetrics displayMetrics = mock(displayMetrics.class);    displayMetrics.wIDthPixels = 600;    Resources mockResources = mock(Resources.class);    when(mockResources.getdisplayMetrics()).thenReturn(displayMetrics);    Context mockContext = mock(Context.class);    when(mockContext.getResources()).thenReturn(mockResources);    customTV = new CustomTextVIEw(mockContext);}@SmallTestpublic voID testVIEwSize() {    Assert.assertEquals("Text size dID not scale", 42, customTV.getTextSize());}

此外,我仅在某些设备上出现错误(以上实现适用于某些屏幕尺寸,但并非全部):

Error in testVIEwSize:java.lang.NullPointerException: Attempt to invoke virtual method 'boolean androID.content.res.Configuration.isLayoutSizeAtLeast(int)' on a null object reference    at androID.vIEw.VIEwConfiguration.<init>(VIEwConfiguration.java:284)    at androID.vIEw.VIEwConfiguration.get(VIEwConfiguration.java:364)    at androID.vIEw.VIEw.<init>(VIEw.java:3781)    at androID.vIEw.VIEw.<init>(VIEw.java:3876)    at androID.Widget.TextVIEw.<init>(TextVIEw.java:655)    at androID.Widget.TextVIEw.<init>(TextVIEw.java:650)    at androID.Widget.TextVIEw.<init>(TextVIEw.java:646)    at com.foo.bar.vIEw.CustomTextVIEw.<init>(CustomTextVIEw.java:55)    at com.foo.bar.vIEw.CustomTextVIEw.<init>(CustomTextVIEw.java:45)    at com.foo.bar.vIEw.CustomTextVIEwTests.setUp(CustomTextVIEwTests.java:52)    at androID.test.AndroIDTestRunner.runTest(AndroIDTestRunner.java:191)    at androID.test.AndroIDTestRunner.runTest(AndroIDTestRunner.java:176)    at androID.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:557)    at androID.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1874)

我真正想做的就是将displayMetrics.wIDthPixels的返回值设置为一个特定的数字,但是由于它不是方法调用(如getter或setter),所以无法像在when和thenReturn中那样覆盖它其他模拟对象中的方法.

有没有更简单的方法来模拟Context / Resources / displayMetrics?

解决方法:

要回答您的问题,您可以像在做一样嘲笑它.

displayMetrics metrics = mock(displayMetrics.class);metrics.wIDthPixels = 300;Resources resources = mock(Resources.class);when(resources.getdisplayMetrics()).thenReturn(metrics);Assert.assertEquals(300, resources.getdisplayMetrics().wIDthPixels);// ^^ see proof

您发布的错误消息仅表明您需要模拟更多对象.你做得还不够.

java.lang.NullPointerException: Attempt to invoke virtual method ‘boolean androID.content.res.Configuration

因此,还要模拟出Configuration对象.

编辑:

如果您使用的是Robolectric,则使用实际配置显示的代码:

Context context = mock(Context.class);Resources resources = mock(Resources.class);when(resources.getConfiguration()).thenReturn(RuntimeEnvironment.application.getResources().getConfiguration());when(context.getResources()).thenReturn(resources);
总结

以上是内存溢出为你收集整理的android-如何使用Mockito模拟DisplayMetrics全部内容,希望文章能够帮你解决android-如何使用Mockito模拟DisplayMetrics所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1081031.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存