【问题标题】:Android Unittesting with Databinding使用数据绑定进行 Android 单元测试
【发布时间】:2016-07-13 11:02:18
【问题描述】:

我现在正在做一个非常好的项目,我们在其中引入了 Android 数据绑定。代码中一切正常,绑定完美,但是在单元测试方面我无法测试我的代码。 我正在努力模拟数据绑定......

将此行添加到 setUp() 方法时:

PowerMockito.when(DataBindingUtil.class, "inflate", inflater,anyInt(),any(ViewGroup.class),anyBoolean()).thenReturn(viewDataBinding.getRoot());

我将收到以下错误消息:

...thenReturn() 可能会丢失。

如你所见,最后我有 thenReturn ,但 Mockito 没有看到。

我尝试将代码移动到具体的测试方法中:

  @Test
public void createViewHolder() {
  .... CODE....
 when(DataBindingUtil.inflate(inflater,anyInt(),any(ViewGroup.class),anyBoolean())).thenReturn(viewDataBinding);
... CODE ...}

在这种情况下,我将收到以下消息:

org.mockito.exceptions.misusing.WrongTypeOfReturnValue: Inflate() 无法返回 ViewDataBinding$$EnhancerByMockitoWithCGLIB$$f5f40ad1 inflate() 应该返回视图

我不明白为什么我会收到此消息,因为 DataBindingUtil.inflate 在代码中返回了一个 ViewDataBinding,它可以完美运行。 你们有没有人尝试过在 Android 上模拟和单元测试数据绑定?

【问题讨论】:

    标签: android unit-testing data-binding


    【解决方案1】:

    好的,问题如下: 需要补充:

    @PrepareForTest({DataBindingUtil.class}) 到上课的开头

    PowerMockito.mockStatic(DataBindingUtil.class);
    PowerMockito.mockStatic(ViewDataBinding.class);
    

    我必须将这些行添加到 setUp();

    然后:

    when(DataBindingUtil.inflate(eq(inflater), anyInt(), any(ViewGroup.class), anyBoolean())).thenReturn(viewDataBinding);
    when(viewDataBinding.getRoot()).thenReturn(itemView);
    

    进入测试本身。

    【讨论】:

    • 尽管如此,我仍在寻找一个很棒的框架,如何测试数据绑定的 XML。
    • 为此您可以使用“viewHolder.binding.executePendingBindings()”
    猜你喜欢
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 2016-07-03
    相关资源
    最近更新 更多