gpt4 book ai didi

android - 可以模拟/测试 Android ViewBinding 交互吗?

转载 作者:行者123 更新时间:2023-12-03 19:15:15 26 4
gpt4 key购买 nike

目前正在尝试测试与 ViewBinding 的交互。单元测试中的类

"Invalid Input" should {
"disable the LoginButton" {
val viewBinding: FrLoginBinding = mockk()

InvalidInputViewStateBinder.bind(InvalidInput, viewBinding)

verify { viewBinding.loginButton.isEnabled = false }
}
}

像这样的事情就是我的想法。 ViewBinding 中的 View 是公共(public)的最终属性,不能轻易模拟。至少我做不到。通过 View模拟创建 ViewBinding 也不起作用,因为我必须模拟 findViewById为了它。

有没有人试过这个并让它工作?

最佳答案

我遇到了同样的问题。这是我解决它的方法


@RunWith(PowerMockRunner::class)
@PrepareForTest(MyLayoutBinding::class)
class MyTestClass {

@Mock
lateinit var mMockViewBinding: MyLayoutBinding

@Mock
lateinit var mMockView: View

@Mock
lateinit var mMockTitleTv: TextView

@Mock
lateinit var mMockRootView: ConstraintLayout

@Before
fun setup() {
MockitoAnnotations.initMocks(this)
PowerMockito.mockStatic(MyLayoutBinding::class.java)
whenever(MyLayoutBinding.bind(mMockView)).thenReturn(mMockViewBinding)

// Use Whitebox for each view component in the layout.
Whitebox.setInternalState(mMockBinding, "title", mMockTitleTv)

// Because 'getRoot' is part of the ViewBinding interface, we just mock the method.
whenever(mMockBinding.root).thenReturn(mMockRootView)
}


}
使用 Whitebox 设置属性(即按 id 的 View )并模拟 getRoot() 接口(interface)方法以将根设置为模拟的 Root View 。

关于android - 可以模拟/测试 Android ViewBinding 交互吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60965983/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com